Thicket data repository for the EEG
1{
2 "id": "https://ryan.freumh.org/2024-08-26.html",
3 "title": "26 Aug 2024",
4 "link": "https://ryan.freumh.org/2024-08-26.html",
5 "updated": "2024-08-26T00:00:00",
6 "published": "2024-08-26T00:00:00",
7 "summary": "<div>\n <span> Previous: <a href=\"2024-08-12.html\">12 Aug 2024</a> </span>\n <span> Next: <a href=\"2024-09-02.html\"> 2 Sep 2024</a> </span>\n </div>\n \n \n\n <ol>\n<li><p><span>Mon</span></p>\n<p><span>ok, so we’re going to try and modify\nopam-0install-solver to have different `roles` per implementation for\nevery cargo package so there’s no restrictions on a single version of a\npackage.</span></p>\n<p><span>where are the roles defined? Model.role</span></p>\n<p><span>where are the implementations defined?\nModel.implementations</span></p>\n<p><span>Okay, so what’s the problem? If we have a role as\nan <code>OpamPackage</code> (name + version) how do we\nspecify the versions to solve in the first instance? Can we just say any\nof them? Maybe as constraints? Or do you know what, let’s just specify a\nversion up front. How do we minimise duplicated dependancies?</span></p>\n<p><span>How do we do express version constraints with each\nrole a different version?</span></p>\n<p><span>This is trickier than I anticipated. How do we\nexpress dependencies when we have each package version as a distinct\n‘role’? We need a way to go from a role to a list of dependency roles in\n0install. We could express this at the SAT solving (for 0install) or\nCUDF layer as e.g. package.1.1 OR package.1.2 OR package.1.3, but this\nwould require modifying the 0install solver directly</span></p>\n<p><span>This is trickier than I anticipated. Namely how we\nexpress dependencies when we have each package version as a distinct\n‘role’. 0install uses a ‘requires’ list of dependency roles, which when\nusing a separate role for each dependency means we need to pick a\nversion at the dependency specifying stage. Instead of depending on a\nrole with a concrete version, we could express this at the SAT solving\n(for 0install) or CUDF layer as e.g. package.1.1 OR package.1.2 OR\npackage.1.3, but this would require modifying the 0install solver\ndirectly.</span></p>\n<p><span>For reference, the <a href=\"https://github.com/0install/0install/blob/225587eef889a3082e0cc53fa64500f56cca0028/src/solver/solver_core.ml#L525\">solver\nfunction</a>, which builds a <a href=\"https://github.com/0install/0install/blob/225587eef889a3082e0cc53fa64500f56cca0028/src/solver/solver_core.ml#L435\">SAT\nproblem</a> which adds an <a href=\"https://github.com/0install/0install/blob/225587eef889a3082e0cc53fa64500f56cca0028/src/solver/solver_core.ml#L371\">expression\nfor dependencies</a>, which we could modify to enumerate multiple\nroles.</span></p></li>\n<li><p><span>Wed</span></p>\n<p><span>In the first instance let’s try and get it working\nspraying versions all over the place.</span></p>\n<p><span>Actually, maybe we can do something with\nrestrictions?</span></p>\n<p><span>with <code>meets_restriction</code>?</span></p>\n<p><span>and <code>implementations</code></span></p></li>\n<li><p><span>Thu</span></p>\n<ul>\n<li>Got a <a href=\"https://github.com/RyanGibb/opam-0install-solver/commit/dcf7676a331d9c058cef15ce3f6892f5b05fd1da\">prototype\nsolver</a> for multiple versions of a dependancy</li>\n<li>But it’s very slow, and the solver will return all implementations\nof a role for a single dependance relation.</li>\n</ul>\n<pre><code>$ dune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages cargo-sauron-core.0.57.0\ncargo-bumpalo.3.2.1 cargo-cfg-if.0.1.0 cargo-cfg-if.0.1.2 cargo-cfg-if.1.0.0 cargo-doc-comment.0.3.0 cargo-dtoa.0.4.0 cargo-itoa.0.3.0 cargo-js-sys.0.3.0 cargo-json.0.12.0 cargo-jss.0.6.1 cargo-lazy_static.1.0.0 cargo-log.0.4.0 cargo-longest-increasing-subsequence.0.1.0 cargo-mt-dom.0.55.1 cargo-num-traits.0.1.32 cargo-once_cell.1.8.0 cargo-once_cell.1.12.0 cargo-phf.0.10.0 cargo-phf_shared.0.10.0 cargo-proc-macro2.0.4.0 cargo-proc-macro2.0.4.4 cargo-proc-macro2.0.4.8 cargo-proc-macro2.0.4.9 cargo-proc-macro2.1.0.0 cargo-proc-macro2.1.0.23 cargo-quote.0.3.8 cargo-quote.0.6.0 cargo-quote.1.0.0 cargo-sauron-core.0.57.0 cargo-serde.1.0.0 cargo-serde-wasm-bindgen.0.5.0 cargo-serde_derive.1.0.0 cargo-serde_derive_internals.0.15.0 cargo-serde_json.1.0.0 cargo-siphasher.0.3.0 cargo-syn.0.11.0 cargo-syn.0.11.10 cargo-syn.0.15.0 cargo-syn.1.0.0 cargo-syn.1.0.67 cargo-synom.0.11.0 cargo-thiserror.1.0.0 cargo-thiserror-impl.1.0.0 cargo-unicode-xid.0.0.4 cargo-unicode-xid.0.1.0 cargo-unicode-xid.0.2.0 cargo-wasm-bindgen.0.2.23 cargo-wasm-bindgen.0.2.83 cargo-wasm-bindgen-backend.0.2.23 cargo-wasm-bindgen-backend.0.2.83 cargo-wasm-bindgen-macro.0.2.23 cargo-wasm-bindgen-macro.0.2.83 cargo-wasm-bindgen-macro-support.0.2.23 cargo-wasm-bindgen-macro-support.0.2.83 cargo-wasm-bindgen-shared.0.2.23 cargo-wasm-bindgen-shared.0.2.83\n- cargo-bumpalo.3.2.1\n- cargo-cfg-if.0.1.0\n- cargo-cfg-if.0.1.2\n- cargo-cfg-if.1.0.0\n- cargo-doc-comment.0.3.0\n- cargo-dtoa.0.4.0\n- cargo-itoa.0.3.0\n- cargo-js-sys.0.3.0\n- cargo-json.0.12.0\n- cargo-jss.0.6.1\n- cargo-lazy_static.1.0.0\n- cargo-log.0.4.0\n- cargo-longest-increasing-subsequence.0.1.0\n- cargo-mt-dom.0.55.1\n- cargo-num-traits.0.1.32\n- cargo-once_cell.1.8.0\n- cargo-once_cell.1.12.0\n- cargo-phf.0.10.0\n- cargo-phf_shared.0.10.0\n- cargo-proc-macro2.0.4.0\n- cargo-proc-macro2.0.4.4\n- cargo-proc-macro2.0.4.8\n- cargo-proc-macro2.0.4.9\n- cargo-proc-macro2.1.0.0\n- cargo-proc-macro2.1.0.23\n- cargo-quote.0.3.8\n- cargo-quote.0.6.0\n- cargo-quote.1.0.0\n- cargo-sauron-core.0.57.0\n- cargo-serde.1.0.0\n- cargo-serde-wasm-bindgen.0.5.0\n- cargo-serde_derive.1.0.0\n- cargo-serde_derive_internals.0.15.0\n- cargo-serde_json.1.0.0\n- cargo-siphasher.0.3.0\n- cargo-syn.0.11.0\n- cargo-syn.0.11.10\n- cargo-syn.0.15.0\n- cargo-syn.1.0.0\n- cargo-syn.1.0.67\n- cargo-synom.0.11.0\n- cargo-thiserror.1.0.0\n- cargo-thiserror-impl.1.0.0\n- cargo-unicode-xid.0.0.4\n- cargo-unicode-xid.0.1.0\n- cargo-unicode-xid.0.2.0\n- cargo-wasm-bindgen.0.2.23\n- cargo-wasm-bindgen.0.2.83\n- cargo-wasm-bindgen-backend.0.2.23\n- cargo-wasm-bindgen-backend.0.2.83\n- cargo-wasm-bindgen-macro.0.2.23\n- cargo-wasm-bindgen-macro.0.2.83\n- cargo-wasm-bindgen-macro-support.0.2.23\n- cargo-wasm-bindgen-macro-support.0.2.83\n- cargo-wasm-bindgen-shared.0.2.23\n- cargo-wasm-bindgen-shared.0.2.83\n</code></pre>\n<pre><code>Can't find all required versions.\nSelected: cargo-doc-comment.0.3.3 cargo-js-sys.0.3.70 cargo-json.0.12.4\n cargo-jss.0.6.2 cargo-log.0.4.22\n cargo-longest-increasing-subsequence.0.1.0 cargo-mt-dom.0.59.2\n cargo-once_cell.1.19.0 cargo-phf.0.11.2 cargo-phf_shared.0.11.2\n cargo-proc-macro2.1.0.86 cargo-quote.1.0.37 cargo-serde.1.0.209\n cargo-serde-wasm-bindgen.0.6.5 cargo-serde_derive.1.0.209\n cargo-syn.2.0.76 cargo-thiserror.1.0.63 cargo-thiserror-impl.1.0.63\n cargo-unicode-ident.1.0.12\n- cargo-cfg-if -> cargo-cfg-if.0.1.10\n cargo-sauron-core 0.57.0 requires >= 0.1 & < 1.0.0\n- cargo-sauron-core -> cargo-sauron-core.0.57.0\n User requested = 0.57.0\n- cargo-siphasher -> cargo-siphasher.0.3.11\n cargo-phf_shared 0.11.2 requires >= 0.3 & < 1.0.0\n- cargo-wasm-bindgen -> (problem)\n cargo-js-sys 0.3.70 requires >= 0.2.93 & < 1.0.0\n Rejected candidates:\n cargo-wasm-bindgen.0.2.93: Requires cargo-cfg-if >= 1.0.0 & < 2.0.0\n cargo-wasm-bindgen.0.2.92: Incompatible with restriction: >= 0.2.93 & < 1.0.0\n cargo-wasm-bindgen.0.2.91: Incompatible with restriction: >= 0.2.93 & < 1.0.0\n cargo-wasm-bindgen.0.2.90: Incompatible with restriction: >= 0.2.93 & < 1.0.0\n cargo-wasm-bindgen.0.2.89: Incompatible with restriction: >= 0.2.93 & < 1.0.0\n ...\nFailed: cargo-sauron-core.0.57.0\n</code></pre>\n<ul>\n<li>We want to restrict solving a single version of a package per\ndependancy.</li>\n<li>This may describe some of the performances issues as well.</li>\n<li>core calculus: depends, deopts, restricts</li>\n</ul>\n<ul>\n<li>ah, ha! we just needed to reverse the dependancies list to get the\nright order</li>\n</ul>\n<pre><code>dune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages cargo-sauron-core.0.57.0\ncargo-bumpalo.3.16.0 cargo-cfg-if.0.1.10 cargo-cfg-if.1.0.0 cargo-doc-comment.0.3.3 cargo-js-sys.0.3.70 cargo-json.0.12.4 cargo-jss.0.6.2 cargo-log.0.4.22 cargo-longest-increasing-subsequence.0.1.0 cargo-mt-dom.0.59.2 cargo-once_cell.1.19.0 cargo-phf.0.11.2 cargo-phf_shared.0.11.2 cargo-proc-macro2.1.0.86 cargo-quote.1.0.37 cargo-sauron-core.0.57.0 cargo-serde.1.0.209 cargo-serde-wasm-bindgen.0.6.5 cargo-serde_derive.1.0.209 cargo-siphasher.0.3.11 cargo-syn.2.0.76 cargo-thiserror.1.0.63 cargo-thiserror-impl.1.0.63 cargo-unicode-ident.1.0.12 cargo-wasm-bindgen.0.2.93 cargo-wasm-bindgen-backend.0.2.93 cargo-wasm-bindgen-macro.0.2.93 cargo-wasm-bindgen-macro-support.0.2.93 cargo-wasm-bindgen-shared.0.2.93\n- cargo-bumpalo.3.16.0\n- cargo-cfg-if.0.1.10\n- cargo-cfg-if.1.0.0\n- cargo-doc-comment.0.3.3\n- cargo-js-sys.0.3.70\n- cargo-json.0.12.4\n- cargo-jss.0.6.2\n- cargo-log.0.4.22\n- cargo-longest-increasing-subsequence.0.1.0\n- cargo-mt-dom.0.59.2\n- cargo-once_cell.1.19.0\n- cargo-phf.0.11.2\n- cargo-phf_shared.0.11.2\n- cargo-proc-macro2.1.0.86\n- cargo-quote.1.0.37\n- cargo-sauron-core.0.57.0\n- cargo-serde.1.0.209\n- cargo-serde-wasm-bindgen.0.6.5\n- cargo-serde_derive.1.0.209\n- cargo-siphasher.0.3.11\n- cargo-syn.2.0.76\n- cargo-thiserror.1.0.63\n- cargo-thiserror-impl.1.0.63\n- cargo-unicode-ident.1.0.12\n- cargo-wasm-bindgen.0.2.93\n- cargo-wasm-bindgen-backend.0.2.93\n- cargo-wasm-bindgen-macro.0.2.93\n- cargo-wasm-bindgen-macro-support.0.2.93\n- cargo-wasm-bindgen-shared.0.2.93\n</code></pre>\n<ul>\n<li>Next up is supporting both of these in one dependency tree, which\nmight require adding a new flag to the cargo opam files</li>\n</ul>\n<pre><code>$ time dune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages cargo-ripgrep\ncargo-aho-corasick.0.7.20 cargo-aho-corasick.1.1.3 cargo-bitflags.2.6.0 cargo-bstr.1.10.0 cargo-cfg-if.1.0.0 cargo-crossbeam.0.8.4 cargo-crossbeam-utils.0.8.20 cargo-dirs-next.2.0.0 cargo-dirs-sys-next.0.1.2 cargo-docopt.0.9.0 cargo-encoding_rs.0.8.34 cargo-encoding_rs_io.0.1.7 cargo-env_filter.0.1.2 cargo-env_logger.0.11.5 cargo-getrandom.0.2.15 cargo-globset.0.4.14 cargo-grep.0.3.1 cargo-grep-cli.0.1.10 cargo-grep-matcher.0.1.7 cargo-grep-printer.0.2.1 cargo-grep-regex.0.1.12 cargo-grep-searcher.0.1.13 cargo-hermit-abi.0.4.0 cargo-kernel32-sys.0.2.2 cargo-lazy_static.0.2.11 cargo-lazy_static.1.5.0 cargo-libc.0.2.158 cargo-libredox.0.1.3 cargo-log.0.4.22 cargo-memchr.0.1.11 cargo-memchr.2.7.4 cargo-memmap.0.7.0 cargo-memmap2.0.9.4 cargo-num_cpus.1.16.0 cargo-proc-macro2.1.0.86 cargo-quote.1.0.37 cargo-redox_users.0.4.6 cargo-regex.0.2.11 cargo-regex.1.10.6 cargo-regex-automata.0.4.7 cargo-regex-syntax.0.8.4 cargo-ripgrep.0.1.0 cargo-rustc-serialize.0.3.25 cargo-rustversion.1.0.17 cargo-serde.1.0.209 cargo-serde_derive.1.0.209 cargo-strsim.0.11.1 cargo-syn.2.0.76 cargo-term.0.7.0 cargo-termcolor.1.4.1 cargo-thiserror.1.0.63 cargo-thiserror-impl.1.0.63 cargo-thread_local.0.3.6 cargo-unicode-ident.1.0.12 cargo-utf8-ranges.1.0.5 cargo-walkdir.0.1.8 cargo-wasi.0.13.2+wasi-0.2.1 cargo-winapi.0.3.9 cargo-winapi-i686-pc-windows-gnu.0.4.0 cargo-winapi-util.0.1.9 cargo-winapi-x86_64-pc-windows-gnu.0.4.0 cargo-windows-sys.0.52.0 cargo-windows-targets.0.52.6 cargo-windows_aarch64_gnullvm.0.52.6 cargo-windows_aarch64_msvc.0.52.6 cargo-windows_i686_gnu.0.52.6 cargo-windows_i686_gnullvm.0.52.6 cargo-windows_i686_msvc.0.52.6 cargo-windows_x86_64_gnu.0.52.6 cargo-windows_x86_64_gnullvm.0.52.6 cargo-windows_x86_64_msvc.0.52.6 cargo-wit-bindgen-rt.0.30.0\n- cargo-aho-corasick.0.7.20\n- cargo-aho-corasick.1.1.3\n- cargo-bitflags.2.6.0\n- cargo-bstr.1.10.0\n- cargo-cfg-if.1.0.0\n- cargo-crossbeam.0.8.4\n- cargo-crossbeam-utils.0.8.20\n- cargo-dirs-next.2.0.0\n- cargo-dirs-sys-next.0.1.2\n- cargo-docopt.0.9.0\n- cargo-encoding_rs.0.8.34\n- cargo-encoding_rs_io.0.1.7\n- cargo-env_filter.0.1.2\n- cargo-env_logger.0.11.5\n- cargo-getrandom.0.2.15\n- cargo-globset.0.4.14\n- cargo-grep.0.3.1\n- cargo-grep-cli.0.1.10\n- cargo-grep-matcher.0.1.7\n- cargo-grep-printer.0.2.1\n- cargo-grep-regex.0.1.12\n- cargo-grep-searcher.0.1.13\n- cargo-hermit-abi.0.4.0\n- cargo-kernel32-sys.0.2.2\n- cargo-lazy_static.0.2.11\n- cargo-lazy_static.1.5.0\n- cargo-libc.0.2.158\n- cargo-libredox.0.1.3\n- cargo-log.0.4.22\n- cargo-memchr.0.1.11\n- cargo-memchr.2.7.4\n- cargo-memmap.0.7.0\n- cargo-memmap2.0.9.4\n- cargo-num_cpus.1.16.0\n- cargo-proc-macro2.1.0.86\n- cargo-quote.1.0.37\n- cargo-redox_users.0.4.6\n- cargo-regex.0.2.11\n- cargo-regex.1.10.6\n- cargo-regex-automata.0.4.7\n- cargo-regex-syntax.0.8.4\n- cargo-ripgrep.0.1.0\n- cargo-rustc-serialize.0.3.25\n- cargo-rustversion.1.0.17\n- cargo-serde.1.0.209\n- cargo-serde_derive.1.0.209\n- cargo-strsim.0.11.1\n- cargo-syn.2.0.76\n- cargo-term.0.7.0\n- cargo-termcolor.1.4.1\n- cargo-thiserror.1.0.63\n- cargo-thiserror-impl.1.0.63\n- cargo-thread_local.0.3.6\n- cargo-unicode-ident.1.0.12\n- cargo-utf8-ranges.1.0.5\n- cargo-walkdir.0.1.8\n- cargo-wasi.0.13.2+wasi-0.2.1\n- cargo-winapi.0.3.9\n- cargo-winapi-i686-pc-windows-gnu.0.4.0\n- cargo-winapi-util.0.1.9\n- cargo-winapi-x86_64-pc-windows-gnu.0.4.0\n- cargo-windows-sys.0.52.0\n- cargo-windows-targets.0.52.6\n- cargo-windows_aarch64_gnullvm.0.52.6\n- cargo-windows_aarch64_msvc.0.52.6\n- cargo-windows_i686_gnu.0.52.6\n- cargo-windows_i686_gnullvm.0.52.6\n- cargo-windows_i686_msvc.0.52.6\n- cargo-windows_x86_64_gnu.0.52.6\n- cargo-windows_x86_64_gnullvm.0.52.6\n- cargo-windows_x86_64_msvc.0.52.6\n- cargo-wit-bindgen-rt.0.30.0\ndune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages 1159.56s user 19.92s system 99% cpu 19:40.02 total\n</code></pre>\n<pre><code>$ time dune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages cargo-ripgrep.14.1.0\ncargo-aho-corasick.1.1.3 cargo-anyhow.1.0.86 cargo-bstr.1.10.0 cargo-cfg-if.1.0.0 cargo-crossbeam-deque.0.8.5 cargo-crossbeam-epoch.0.9.18 cargo-crossbeam-utils.0.8.20 cargo-encoding_rs.0.8.34 cargo-encoding_rs_io.0.1.7 cargo-globset.0.4.14 cargo-grep.0.3.1 cargo-grep-cli.0.1.10 cargo-grep-matcher.0.1.7 cargo-grep-printer.0.2.1 cargo-grep-regex.0.1.12 cargo-grep-searcher.0.1.13 cargo-ignore.0.4.22 cargo-itoa.1.0.11 cargo-jemalloc-sys.0.5.4+5.3.0-patched cargo-jemallocator.0.5.4 cargo-lexopt.0.3.0 cargo-libc.0.2.158 cargo-log.0.4.22 cargo-memchr.2.7.4 cargo-memmap2.0.9.4 cargo-proc-macro2.1.0.86 cargo-quote.1.0.37 cargo-regex-automata.0.4.7 cargo-regex-syntax.0.8.4 cargo-ripgrep.14.1.0 cargo-ryu.1.0.18 cargo-same-file.1.0.6 cargo-serde.1.0.209 cargo-serde_derive.1.0.209 cargo-serde_json.1.0.127 cargo-syn.2.0.76 cargo-termcolor.1.4.1 cargo-te\nxtwrap.0.16.1 cargo-unicode-ident.1.0.12 cargo-walkdir.2.5.0 cargo-winapi-util.0.1.9 cargo-windows-sys.0.52.0 cargo-windows-targets.0.52.6 cargo-windows_aarch64_gnullvm.0.52.6 cargo-windows_aarch64_msvc.0.52.6 cargo-windows_i686_gnu.0.52.6 cargo-windows_i686_gnullvm.0.52.6 cargo-windows_i686_msvc.0.52.6 cargo-windows_x86_64_gnu.0.52.6 cargo-windows_x86_64_gnullvm.0.52.6 cargo-windows_x86_64_msvc.0.52.6\n- cargo-aho-corasick.1.1.3\n- cargo-anyhow.1.0.86\n- cargo-bstr.1.10.0\n- cargo-cfg-if.1.0.0\n- cargo-crossbeam-deque.0.8.5\n- cargo-crossbeam-epoch.0.9.18\n- cargo-crossbeam-utils.0.8.20\n- cargo-encoding_rs.0.8.34\n- cargo-encoding_rs_io.0.1.7\n- cargo-globset.0.4.14\n- cargo-grep.0.3.1\n- cargo-grep-cli.0.1.10\n- cargo-grep-matcher.0.1.7\n- cargo-grep-printer.0.2.1\n- cargo-grep-regex.0.1.12\n- cargo-grep-searcher.0.1.13\n- cargo-ignore.0.4.22\n- cargo-itoa.1.0.11\n- cargo-jemalloc-sys.0.5.4+5.3.0-patched\n- cargo-jemallocator.0.5.4\n- cargo-lexopt.0.3.0\n- cargo-libc.0.2.158\n- cargo-log.0.4.22\n- cargo-memchr.2.7.4\n- cargo-memmap2.0.9.4\n- cargo-proc-macro2.1.0.86\n- cargo-quote.1.0.37\n- cargo-regex-automata.0.4.7\n- cargo-regex-syntax.0.8.4\n- cargo-ripgrep.14.1.0\n- cargo-ryu.1.0.18\n- cargo-same-file.1.0.6\n- cargo-serde.1.0.209\n- cargo-serde_derive.1.0.209\n- cargo-serde_json.1.0.127\n- cargo-syn.2.0.76\n- cargo-termcolor.1.4.1\n- cargo-textwrap.0.16.1\n- cargo-unicode-ident.1.0.12\n- cargo-walkdir.2.5.0\n- cargo-winapi-util.0.1.9\n- cargo-windows-sys.0.52.0\n- cargo-windows-targets.0.52.6\n- cargo-windows_aarch64_gnullvm.0.52.6\n- cargo-windows_aarch64_msvc.0.52.6\n- cargo-windows_i686_gnu.0.52.6\n- cargo-windows_i686_gnullvm.0.52.6\n- cargo-windows_i686_msvc.0.52.6\n- cargo-windows_x86_64_gnu.0.52.6\n- cargo-windows_x86_64_gnullvm.0.52.6\n- cargo-windows_x86_64_msvc.0.52.6\ndune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages 11.95s user 2.18s system 101% cpu 13.850 total\n</code></pre></li>\n</ol>",
8 "content": "<div>\n <span> Previous: <a href=\"2024-08-12.html\">12 Aug 2024</a> </span>\n <span> Next: <a href=\"2024-09-02.html\"> 2 Sep 2024</a> </span>\n </div>\n \n \n\n <ol>\n<li><p><span>Mon</span></p>\n<p><span>ok, so we’re going to try and modify\nopam-0install-solver to have different `roles` per implementation for\nevery cargo package so there’s no restrictions on a single version of a\npackage.</span></p>\n<p><span>where are the roles defined? Model.role</span></p>\n<p><span>where are the implementations defined?\nModel.implementations</span></p>\n<p><span>Okay, so what’s the problem? If we have a role as\nan <code>OpamPackage</code> (name + version) how do we\nspecify the versions to solve in the first instance? Can we just say any\nof them? Maybe as constraints? Or do you know what, let’s just specify a\nversion up front. How do we minimise duplicated dependancies?</span></p>\n<p><span>How do we do express version constraints with each\nrole a different version?</span></p>\n<p><span>This is trickier than I anticipated. How do we\nexpress dependencies when we have each package version as a distinct\n‘role’? We need a way to go from a role to a list of dependency roles in\n0install. We could express this at the SAT solving (for 0install) or\nCUDF layer as e.g. package.1.1 OR package.1.2 OR package.1.3, but this\nwould require modifying the 0install solver directly</span></p>\n<p><span>This is trickier than I anticipated. Namely how we\nexpress dependencies when we have each package version as a distinct\n‘role’. 0install uses a ‘requires’ list of dependency roles, which when\nusing a separate role for each dependency means we need to pick a\nversion at the dependency specifying stage. Instead of depending on a\nrole with a concrete version, we could express this at the SAT solving\n(for 0install) or CUDF layer as e.g. package.1.1 OR package.1.2 OR\npackage.1.3, but this would require modifying the 0install solver\ndirectly.</span></p>\n<p><span>For reference, the <a href=\"https://github.com/0install/0install/blob/225587eef889a3082e0cc53fa64500f56cca0028/src/solver/solver_core.ml#L525\">solver\nfunction</a>, which builds a <a href=\"https://github.com/0install/0install/blob/225587eef889a3082e0cc53fa64500f56cca0028/src/solver/solver_core.ml#L435\">SAT\nproblem</a> which adds an <a href=\"https://github.com/0install/0install/blob/225587eef889a3082e0cc53fa64500f56cca0028/src/solver/solver_core.ml#L371\">expression\nfor dependencies</a>, which we could modify to enumerate multiple\nroles.</span></p></li>\n<li><p><span>Wed</span></p>\n<p><span>In the first instance let’s try and get it working\nspraying versions all over the place.</span></p>\n<p><span>Actually, maybe we can do something with\nrestrictions?</span></p>\n<p><span>with <code>meets_restriction</code>?</span></p>\n<p><span>and <code>implementations</code></span></p></li>\n<li><p><span>Thu</span></p>\n<ul>\n<li>Got a <a href=\"https://github.com/RyanGibb/opam-0install-solver/commit/dcf7676a331d9c058cef15ce3f6892f5b05fd1da\">prototype\nsolver</a> for multiple versions of a dependancy</li>\n<li>But it’s very slow, and the solver will return all implementations\nof a role for a single dependance relation.</li>\n</ul>\n<pre><code>$ dune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages cargo-sauron-core.0.57.0\ncargo-bumpalo.3.2.1 cargo-cfg-if.0.1.0 cargo-cfg-if.0.1.2 cargo-cfg-if.1.0.0 cargo-doc-comment.0.3.0 cargo-dtoa.0.4.0 cargo-itoa.0.3.0 cargo-js-sys.0.3.0 cargo-json.0.12.0 cargo-jss.0.6.1 cargo-lazy_static.1.0.0 cargo-log.0.4.0 cargo-longest-increasing-subsequence.0.1.0 cargo-mt-dom.0.55.1 cargo-num-traits.0.1.32 cargo-once_cell.1.8.0 cargo-once_cell.1.12.0 cargo-phf.0.10.0 cargo-phf_shared.0.10.0 cargo-proc-macro2.0.4.0 cargo-proc-macro2.0.4.4 cargo-proc-macro2.0.4.8 cargo-proc-macro2.0.4.9 cargo-proc-macro2.1.0.0 cargo-proc-macro2.1.0.23 cargo-quote.0.3.8 cargo-quote.0.6.0 cargo-quote.1.0.0 cargo-sauron-core.0.57.0 cargo-serde.1.0.0 cargo-serde-wasm-bindgen.0.5.0 cargo-serde_derive.1.0.0 cargo-serde_derive_internals.0.15.0 cargo-serde_json.1.0.0 cargo-siphasher.0.3.0 cargo-syn.0.11.0 cargo-syn.0.11.10 cargo-syn.0.15.0 cargo-syn.1.0.0 cargo-syn.1.0.67 cargo-synom.0.11.0 cargo-thiserror.1.0.0 cargo-thiserror-impl.1.0.0 cargo-unicode-xid.0.0.4 cargo-unicode-xid.0.1.0 cargo-unicode-xid.0.2.0 cargo-wasm-bindgen.0.2.23 cargo-wasm-bindgen.0.2.83 cargo-wasm-bindgen-backend.0.2.23 cargo-wasm-bindgen-backend.0.2.83 cargo-wasm-bindgen-macro.0.2.23 cargo-wasm-bindgen-macro.0.2.83 cargo-wasm-bindgen-macro-support.0.2.23 cargo-wasm-bindgen-macro-support.0.2.83 cargo-wasm-bindgen-shared.0.2.23 cargo-wasm-bindgen-shared.0.2.83\n- cargo-bumpalo.3.2.1\n- cargo-cfg-if.0.1.0\n- cargo-cfg-if.0.1.2\n- cargo-cfg-if.1.0.0\n- cargo-doc-comment.0.3.0\n- cargo-dtoa.0.4.0\n- cargo-itoa.0.3.0\n- cargo-js-sys.0.3.0\n- cargo-json.0.12.0\n- cargo-jss.0.6.1\n- cargo-lazy_static.1.0.0\n- cargo-log.0.4.0\n- cargo-longest-increasing-subsequence.0.1.0\n- cargo-mt-dom.0.55.1\n- cargo-num-traits.0.1.32\n- cargo-once_cell.1.8.0\n- cargo-once_cell.1.12.0\n- cargo-phf.0.10.0\n- cargo-phf_shared.0.10.0\n- cargo-proc-macro2.0.4.0\n- cargo-proc-macro2.0.4.4\n- cargo-proc-macro2.0.4.8\n- cargo-proc-macro2.0.4.9\n- cargo-proc-macro2.1.0.0\n- cargo-proc-macro2.1.0.23\n- cargo-quote.0.3.8\n- cargo-quote.0.6.0\n- cargo-quote.1.0.0\n- cargo-sauron-core.0.57.0\n- cargo-serde.1.0.0\n- cargo-serde-wasm-bindgen.0.5.0\n- cargo-serde_derive.1.0.0\n- cargo-serde_derive_internals.0.15.0\n- cargo-serde_json.1.0.0\n- cargo-siphasher.0.3.0\n- cargo-syn.0.11.0\n- cargo-syn.0.11.10\n- cargo-syn.0.15.0\n- cargo-syn.1.0.0\n- cargo-syn.1.0.67\n- cargo-synom.0.11.0\n- cargo-thiserror.1.0.0\n- cargo-thiserror-impl.1.0.0\n- cargo-unicode-xid.0.0.4\n- cargo-unicode-xid.0.1.0\n- cargo-unicode-xid.0.2.0\n- cargo-wasm-bindgen.0.2.23\n- cargo-wasm-bindgen.0.2.83\n- cargo-wasm-bindgen-backend.0.2.23\n- cargo-wasm-bindgen-backend.0.2.83\n- cargo-wasm-bindgen-macro.0.2.23\n- cargo-wasm-bindgen-macro.0.2.83\n- cargo-wasm-bindgen-macro-support.0.2.23\n- cargo-wasm-bindgen-macro-support.0.2.83\n- cargo-wasm-bindgen-shared.0.2.23\n- cargo-wasm-bindgen-shared.0.2.83\n</code></pre>\n<pre><code>Can't find all required versions.\nSelected: cargo-doc-comment.0.3.3 cargo-js-sys.0.3.70 cargo-json.0.12.4\n cargo-jss.0.6.2 cargo-log.0.4.22\n cargo-longest-increasing-subsequence.0.1.0 cargo-mt-dom.0.59.2\n cargo-once_cell.1.19.0 cargo-phf.0.11.2 cargo-phf_shared.0.11.2\n cargo-proc-macro2.1.0.86 cargo-quote.1.0.37 cargo-serde.1.0.209\n cargo-serde-wasm-bindgen.0.6.5 cargo-serde_derive.1.0.209\n cargo-syn.2.0.76 cargo-thiserror.1.0.63 cargo-thiserror-impl.1.0.63\n cargo-unicode-ident.1.0.12\n- cargo-cfg-if -> cargo-cfg-if.0.1.10\n cargo-sauron-core 0.57.0 requires >= 0.1 & < 1.0.0\n- cargo-sauron-core -> cargo-sauron-core.0.57.0\n User requested = 0.57.0\n- cargo-siphasher -> cargo-siphasher.0.3.11\n cargo-phf_shared 0.11.2 requires >= 0.3 & < 1.0.0\n- cargo-wasm-bindgen -> (problem)\n cargo-js-sys 0.3.70 requires >= 0.2.93 & < 1.0.0\n Rejected candidates:\n cargo-wasm-bindgen.0.2.93: Requires cargo-cfg-if >= 1.0.0 & < 2.0.0\n cargo-wasm-bindgen.0.2.92: Incompatible with restriction: >= 0.2.93 & < 1.0.0\n cargo-wasm-bindgen.0.2.91: Incompatible with restriction: >= 0.2.93 & < 1.0.0\n cargo-wasm-bindgen.0.2.90: Incompatible with restriction: >= 0.2.93 & < 1.0.0\n cargo-wasm-bindgen.0.2.89: Incompatible with restriction: >= 0.2.93 & < 1.0.0\n ...\nFailed: cargo-sauron-core.0.57.0\n</code></pre>\n<ul>\n<li>We want to restrict solving a single version of a package per\ndependancy.</li>\n<li>This may describe some of the performances issues as well.</li>\n<li>core calculus: depends, deopts, restricts</li>\n</ul>\n<ul>\n<li>ah, ha! we just needed to reverse the dependancies list to get the\nright order</li>\n</ul>\n<pre><code>dune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages cargo-sauron-core.0.57.0\ncargo-bumpalo.3.16.0 cargo-cfg-if.0.1.10 cargo-cfg-if.1.0.0 cargo-doc-comment.0.3.3 cargo-js-sys.0.3.70 cargo-json.0.12.4 cargo-jss.0.6.2 cargo-log.0.4.22 cargo-longest-increasing-subsequence.0.1.0 cargo-mt-dom.0.59.2 cargo-once_cell.1.19.0 cargo-phf.0.11.2 cargo-phf_shared.0.11.2 cargo-proc-macro2.1.0.86 cargo-quote.1.0.37 cargo-sauron-core.0.57.0 cargo-serde.1.0.209 cargo-serde-wasm-bindgen.0.6.5 cargo-serde_derive.1.0.209 cargo-siphasher.0.3.11 cargo-syn.2.0.76 cargo-thiserror.1.0.63 cargo-thiserror-impl.1.0.63 cargo-unicode-ident.1.0.12 cargo-wasm-bindgen.0.2.93 cargo-wasm-bindgen-backend.0.2.93 cargo-wasm-bindgen-macro.0.2.93 cargo-wasm-bindgen-macro-support.0.2.93 cargo-wasm-bindgen-shared.0.2.93\n- cargo-bumpalo.3.16.0\n- cargo-cfg-if.0.1.10\n- cargo-cfg-if.1.0.0\n- cargo-doc-comment.0.3.3\n- cargo-js-sys.0.3.70\n- cargo-json.0.12.4\n- cargo-jss.0.6.2\n- cargo-log.0.4.22\n- cargo-longest-increasing-subsequence.0.1.0\n- cargo-mt-dom.0.59.2\n- cargo-once_cell.1.19.0\n- cargo-phf.0.11.2\n- cargo-phf_shared.0.11.2\n- cargo-proc-macro2.1.0.86\n- cargo-quote.1.0.37\n- cargo-sauron-core.0.57.0\n- cargo-serde.1.0.209\n- cargo-serde-wasm-bindgen.0.6.5\n- cargo-serde_derive.1.0.209\n- cargo-siphasher.0.3.11\n- cargo-syn.2.0.76\n- cargo-thiserror.1.0.63\n- cargo-thiserror-impl.1.0.63\n- cargo-unicode-ident.1.0.12\n- cargo-wasm-bindgen.0.2.93\n- cargo-wasm-bindgen-backend.0.2.93\n- cargo-wasm-bindgen-macro.0.2.93\n- cargo-wasm-bindgen-macro-support.0.2.93\n- cargo-wasm-bindgen-shared.0.2.93\n</code></pre>\n<ul>\n<li>Next up is supporting both of these in one dependency tree, which\nmight require adding a new flag to the cargo opam files</li>\n</ul>\n<pre><code>$ time dune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages cargo-ripgrep\ncargo-aho-corasick.0.7.20 cargo-aho-corasick.1.1.3 cargo-bitflags.2.6.0 cargo-bstr.1.10.0 cargo-cfg-if.1.0.0 cargo-crossbeam.0.8.4 cargo-crossbeam-utils.0.8.20 cargo-dirs-next.2.0.0 cargo-dirs-sys-next.0.1.2 cargo-docopt.0.9.0 cargo-encoding_rs.0.8.34 cargo-encoding_rs_io.0.1.7 cargo-env_filter.0.1.2 cargo-env_logger.0.11.5 cargo-getrandom.0.2.15 cargo-globset.0.4.14 cargo-grep.0.3.1 cargo-grep-cli.0.1.10 cargo-grep-matcher.0.1.7 cargo-grep-printer.0.2.1 cargo-grep-regex.0.1.12 cargo-grep-searcher.0.1.13 cargo-hermit-abi.0.4.0 cargo-kernel32-sys.0.2.2 cargo-lazy_static.0.2.11 cargo-lazy_static.1.5.0 cargo-libc.0.2.158 cargo-libredox.0.1.3 cargo-log.0.4.22 cargo-memchr.0.1.11 cargo-memchr.2.7.4 cargo-memmap.0.7.0 cargo-memmap2.0.9.4 cargo-num_cpus.1.16.0 cargo-proc-macro2.1.0.86 cargo-quote.1.0.37 cargo-redox_users.0.4.6 cargo-regex.0.2.11 cargo-regex.1.10.6 cargo-regex-automata.0.4.7 cargo-regex-syntax.0.8.4 cargo-ripgrep.0.1.0 cargo-rustc-serialize.0.3.25 cargo-rustversion.1.0.17 cargo-serde.1.0.209 cargo-serde_derive.1.0.209 cargo-strsim.0.11.1 cargo-syn.2.0.76 cargo-term.0.7.0 cargo-termcolor.1.4.1 cargo-thiserror.1.0.63 cargo-thiserror-impl.1.0.63 cargo-thread_local.0.3.6 cargo-unicode-ident.1.0.12 cargo-utf8-ranges.1.0.5 cargo-walkdir.0.1.8 cargo-wasi.0.13.2+wasi-0.2.1 cargo-winapi.0.3.9 cargo-winapi-i686-pc-windows-gnu.0.4.0 cargo-winapi-util.0.1.9 cargo-winapi-x86_64-pc-windows-gnu.0.4.0 cargo-windows-sys.0.52.0 cargo-windows-targets.0.52.6 cargo-windows_aarch64_gnullvm.0.52.6 cargo-windows_aarch64_msvc.0.52.6 cargo-windows_i686_gnu.0.52.6 cargo-windows_i686_gnullvm.0.52.6 cargo-windows_i686_msvc.0.52.6 cargo-windows_x86_64_gnu.0.52.6 cargo-windows_x86_64_gnullvm.0.52.6 cargo-windows_x86_64_msvc.0.52.6 cargo-wit-bindgen-rt.0.30.0\n- cargo-aho-corasick.0.7.20\n- cargo-aho-corasick.1.1.3\n- cargo-bitflags.2.6.0\n- cargo-bstr.1.10.0\n- cargo-cfg-if.1.0.0\n- cargo-crossbeam.0.8.4\n- cargo-crossbeam-utils.0.8.20\n- cargo-dirs-next.2.0.0\n- cargo-dirs-sys-next.0.1.2\n- cargo-docopt.0.9.0\n- cargo-encoding_rs.0.8.34\n- cargo-encoding_rs_io.0.1.7\n- cargo-env_filter.0.1.2\n- cargo-env_logger.0.11.5\n- cargo-getrandom.0.2.15\n- cargo-globset.0.4.14\n- cargo-grep.0.3.1\n- cargo-grep-cli.0.1.10\n- cargo-grep-matcher.0.1.7\n- cargo-grep-printer.0.2.1\n- cargo-grep-regex.0.1.12\n- cargo-grep-searcher.0.1.13\n- cargo-hermit-abi.0.4.0\n- cargo-kernel32-sys.0.2.2\n- cargo-lazy_static.0.2.11\n- cargo-lazy_static.1.5.0\n- cargo-libc.0.2.158\n- cargo-libredox.0.1.3\n- cargo-log.0.4.22\n- cargo-memchr.0.1.11\n- cargo-memchr.2.7.4\n- cargo-memmap.0.7.0\n- cargo-memmap2.0.9.4\n- cargo-num_cpus.1.16.0\n- cargo-proc-macro2.1.0.86\n- cargo-quote.1.0.37\n- cargo-redox_users.0.4.6\n- cargo-regex.0.2.11\n- cargo-regex.1.10.6\n- cargo-regex-automata.0.4.7\n- cargo-regex-syntax.0.8.4\n- cargo-ripgrep.0.1.0\n- cargo-rustc-serialize.0.3.25\n- cargo-rustversion.1.0.17\n- cargo-serde.1.0.209\n- cargo-serde_derive.1.0.209\n- cargo-strsim.0.11.1\n- cargo-syn.2.0.76\n- cargo-term.0.7.0\n- cargo-termcolor.1.4.1\n- cargo-thiserror.1.0.63\n- cargo-thiserror-impl.1.0.63\n- cargo-thread_local.0.3.6\n- cargo-unicode-ident.1.0.12\n- cargo-utf8-ranges.1.0.5\n- cargo-walkdir.0.1.8\n- cargo-wasi.0.13.2+wasi-0.2.1\n- cargo-winapi.0.3.9\n- cargo-winapi-i686-pc-windows-gnu.0.4.0\n- cargo-winapi-util.0.1.9\n- cargo-winapi-x86_64-pc-windows-gnu.0.4.0\n- cargo-windows-sys.0.52.0\n- cargo-windows-targets.0.52.6\n- cargo-windows_aarch64_gnullvm.0.52.6\n- cargo-windows_aarch64_msvc.0.52.6\n- cargo-windows_i686_gnu.0.52.6\n- cargo-windows_i686_gnullvm.0.52.6\n- cargo-windows_i686_msvc.0.52.6\n- cargo-windows_x86_64_gnu.0.52.6\n- cargo-windows_x86_64_gnullvm.0.52.6\n- cargo-windows_x86_64_msvc.0.52.6\n- cargo-wit-bindgen-rt.0.30.0\ndune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages 1159.56s user 19.92s system 99% cpu 19:40.02 total\n</code></pre>\n<pre><code>$ time dune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages cargo-ripgrep.14.1.0\ncargo-aho-corasick.1.1.3 cargo-anyhow.1.0.86 cargo-bstr.1.10.0 cargo-cfg-if.1.0.0 cargo-crossbeam-deque.0.8.5 cargo-crossbeam-epoch.0.9.18 cargo-crossbeam-utils.0.8.20 cargo-encoding_rs.0.8.34 cargo-encoding_rs_io.0.1.7 cargo-globset.0.4.14 cargo-grep.0.3.1 cargo-grep-cli.0.1.10 cargo-grep-matcher.0.1.7 cargo-grep-printer.0.2.1 cargo-grep-regex.0.1.12 cargo-grep-searcher.0.1.13 cargo-ignore.0.4.22 cargo-itoa.1.0.11 cargo-jemalloc-sys.0.5.4+5.3.0-patched cargo-jemallocator.0.5.4 cargo-lexopt.0.3.0 cargo-libc.0.2.158 cargo-log.0.4.22 cargo-memchr.2.7.4 cargo-memmap2.0.9.4 cargo-proc-macro2.1.0.86 cargo-quote.1.0.37 cargo-regex-automata.0.4.7 cargo-regex-syntax.0.8.4 cargo-ripgrep.14.1.0 cargo-ryu.1.0.18 cargo-same-file.1.0.6 cargo-serde.1.0.209 cargo-serde_derive.1.0.209 cargo-serde_json.1.0.127 cargo-syn.2.0.76 cargo-termcolor.1.4.1 cargo-te\nxtwrap.0.16.1 cargo-unicode-ident.1.0.12 cargo-walkdir.2.5.0 cargo-winapi-util.0.1.9 cargo-windows-sys.0.52.0 cargo-windows-targets.0.52.6 cargo-windows_aarch64_gnullvm.0.52.6 cargo-windows_aarch64_msvc.0.52.6 cargo-windows_i686_gnu.0.52.6 cargo-windows_i686_gnullvm.0.52.6 cargo-windows_i686_msvc.0.52.6 cargo-windows_x86_64_gnu.0.52.6 cargo-windows_x86_64_gnullvm.0.52.6 cargo-windows_x86_64_msvc.0.52.6\n- cargo-aho-corasick.1.1.3\n- cargo-anyhow.1.0.86\n- cargo-bstr.1.10.0\n- cargo-cfg-if.1.0.0\n- cargo-crossbeam-deque.0.8.5\n- cargo-crossbeam-epoch.0.9.18\n- cargo-crossbeam-utils.0.8.20\n- cargo-encoding_rs.0.8.34\n- cargo-encoding_rs_io.0.1.7\n- cargo-globset.0.4.14\n- cargo-grep.0.3.1\n- cargo-grep-cli.0.1.10\n- cargo-grep-matcher.0.1.7\n- cargo-grep-printer.0.2.1\n- cargo-grep-regex.0.1.12\n- cargo-grep-searcher.0.1.13\n- cargo-ignore.0.4.22\n- cargo-itoa.1.0.11\n- cargo-jemalloc-sys.0.5.4+5.3.0-patched\n- cargo-jemallocator.0.5.4\n- cargo-lexopt.0.3.0\n- cargo-libc.0.2.158\n- cargo-log.0.4.22\n- cargo-memchr.2.7.4\n- cargo-memmap2.0.9.4\n- cargo-proc-macro2.1.0.86\n- cargo-quote.1.0.37\n- cargo-regex-automata.0.4.7\n- cargo-regex-syntax.0.8.4\n- cargo-ripgrep.14.1.0\n- cargo-ryu.1.0.18\n- cargo-same-file.1.0.6\n- cargo-serde.1.0.209\n- cargo-serde_derive.1.0.209\n- cargo-serde_json.1.0.127\n- cargo-syn.2.0.76\n- cargo-termcolor.1.4.1\n- cargo-textwrap.0.16.1\n- cargo-unicode-ident.1.0.12\n- cargo-walkdir.2.5.0\n- cargo-winapi-util.0.1.9\n- cargo-windows-sys.0.52.0\n- cargo-windows-targets.0.52.6\n- cargo-windows_aarch64_gnullvm.0.52.6\n- cargo-windows_aarch64_msvc.0.52.6\n- cargo-windows_i686_gnu.0.52.6\n- cargo-windows_i686_gnullvm.0.52.6\n- cargo-windows_i686_msvc.0.52.6\n- cargo-windows_x86_64_gnu.0.52.6\n- cargo-windows_x86_64_gnullvm.0.52.6\n- cargo-windows_x86_64_msvc.0.52.6\ndune exec -- bin/main.exe --repo /dev/shm/opam-giga-repository/packages 11.95s user 2.18s system 101% cpu 13.850 total\n</code></pre></li>\n</ol>",
9 "content_type": "html",
10 "categories": [],
11 "source": "https://ryan.freumh.org/atom.xml"
12}