{"id":21807120,"url":"https://github.com/mmtk/mmtk-julia","last_synced_at":"2026-02-10T05:01:19.621Z","repository":{"id":55657863,"uuid":"523178566","full_name":"mmtk/mmtk-julia","owner":"mmtk","description":"Julia binding for MMTk","archived":false,"fork":false,"pushed_at":"2026-02-06T01:00:39.000Z","size":803,"stargazers_count":23,"open_issues_count":79,"forks_count":11,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-02-06T11:04:52.753Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmtk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":"COPYRIGHT","agents":null,"dco":null,"cla":null}},"created_at":"2022-08-10T02:50:34.000Z","updated_at":"2026-02-06T01:00:44.000Z","dependencies_parsed_at":"2026-02-06T03:03:09.262Z","dependency_job_id":null,"html_url":"https://github.com/mmtk/mmtk-julia","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/mmtk/mmtk-julia","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmtk%2Fmmtk-julia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmtk%2Fmmtk-julia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmtk%2Fmmtk-julia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmtk%2Fmmtk-julia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmtk","download_url":"https://codeload.github.com/mmtk/mmtk-julia/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmtk%2Fmmtk-julia/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29290991,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T03:42:42.660Z","status":"ssl_error","status_checked_at":"2026-02-10T03:42:41.897Z","response_time":65,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-27T12:37:11.578Z","updated_at":"2026-02-10T05:01:19.582Z","avatar_url":"https://github.com/mmtk.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"## An MMTk binding for the Julia programming language.\n\n### Quick Building Guide\n\nTo quickly build Julia with MMTk, check out Julia from its main repository instead and create a `Make.user` file containing `MMTK_PLAN=Immix`. \n\n```\ngit clone https://github.com/JuliaLang/julia\ncd julia \u0026\u0026 echo 'MMTK_PLAN=Immix' \u003e Make.user \u0026\u0026 make\n```\n\nThis should automatically check out a (binary) version of this repo, and link it when building Julia itself.\n\nTo build only the mmtk-julia binding from source, run:\n\n```\ngit clone https://github.com/mmtk/mmtk-julia -b master\n(cd mmtk-julia \u0026\u0026 make release)  # or \"make debug\" for a debug build\n```\n\nIf you would like debugging information in your release build of MMTk, add `debug = true` under `[profile.release]` in `mmtk/Cargo.toml`.\nBelow, we provide some instructions on how to build the mmtk-julia binding from source _and_ link it when building Julia.\n\n### Checking out and Building Julia with MMTk\n\nIf you'd like to try out Julia with MMTk, simply clone the Julia repository from https://github.com/JuliaLang/julia and create a `Make.user` file inside the `julia` folder containing `MMTK_PLAN=Immix`. This will automatically checkout the latest release of the mmtk-julia binding and link it while building Julia itself.\n\nTo build the binding from source, besides checking out this repository, it is also necessary to checkout a version of the Julia repository (https://github.com/JuliaLang/julia). We recommend checking out the latest master, but any commit after [this](https://github.com/JuliaLang/julia/commit/22134ca28e92df321bdd08502ddd86ad2d6d614f) should work.\nFor example, we check out Julia as a sibling of `mmtk-julia`.\n\nThe directory structure should look like the diagram below:\n\n```\nYour working directory/\n├─ mmtk-julia/\n│  └─ mmtk/\n├─ julia/ (should be cloned manually)\n└─ mmtk-core/ (optional)\n```\n\n#### Build Julia binding in Rust\n\nBefore building Julia, set `MMTK_JULIA_DIR` to the absolute path containing the binding's top-level directory. Run `make -C $MMTK_JULIA_DIR clean` to make sure you have a fresh version of the binding, and to force it to be built when building Julia. We currently only support a (non-moving) Immix implementation. We hope to add support for non-moving StickyImmix and the respective moving versions of both collectors in the near future. We also only support x86_64 Linux, more architectures should also be supported in the near future.\nFor a release build with debugging information, first add `debug = true` under `[profile.release]` in `mmtk/Cargo.toml`.\nMake sure you have the prerequisites for building [MMTk](https://github.com/mmtk/mmtk-core#requirements).\n\n#### Build Julia with MMTk (from source)\n\nTo build Julia with MMTk using the version built in the previous step, first ensure you have the prerequisites for building [Julia](https://github.com/JuliaLang/julia/blob/master/doc/src/devdocs/build/build.md#required-build-tools-and-external-libraries).\n\nNext create a `Make.user` file in the top-level directory of the Julia repository consisting of the lines:\n\n```\nMMTK_PLAN=Immix\nUSE_BINARYBUILDER_MMTK_JULIA=0\n```\n\nFinally, if you have not done it already, set the following environment variable:\n\n```\nexport MMTK_JULIA_DIR=\u003cpath-to-mmtk-julia\u003e\n```\n... and run `make` from Julia's top-level directory.\n\nAlternatively you can set the environment variables in your `Make.user` \n\n```\nexport MMTK_JULIA_DIR := \u003cpath-to-mmtk-julia\u003e\nexport MMTK_PLAN := Immix\n```\n\nIf you would like to do a debug build of the binding, make sure to also set `MMTK_BUILD=debug` before building Julia.\n\n### Rust FFI bindings from Julia\n\nThe mmtk-julia binding requires a set of Rust FFI bindings that are automatically generated from the Julia repository using [bindgen](https://github.com/rust-lang/rust-bindgen). In this repository, the FFI bindings have already been generated, and added to the file `mmtk/src/julia_types.rs`. \nHowever, if Julia changes the object representation of any of the types defined in the FFI bindings in `mmtk/src/julia_types.rs`, that file will become outdated.\nTo generate the FFI bindings again (and rebuild the binding), checkout the Julia repository following the steps described [previously](#checking-out-and-building-julia-with-mmtk), set the environment variable `JULIA_PATH` to point to the `julia` directory and run `make regen-bindgen-ffi` from the binding's top-level directory, note that this step will already do a release build of mmtk-julia containing the new version of `julia_types.rs`. Make sure you have all the [requirements](https://rust-lang.github.io/rust-bindgen/requirements.html) to running `bindgen`.\n\n### Heap Size\n\nCurrently MMTk supports a fixed heap limit or variable heap within an interval. The default is a variable heap with the minimum heap size set to Julia's [`default_collection_interval`](https://github.com/mmtk/julia/blob/847cddeb7b9ddb5d6b66bec4c19d3a711748a45b/src/gc.c#L651) and the maximum size set to 70% of the free memory available. To change these values set the environment variables `MMTK_MIN_HSIZE` and `MMTK_MAX_HSIZE` to set the mininum and maximum size in megabytes, or `MMTK_MIN_HSIZE_G` and `MMTK_MAX_HSIZE_G` to set the size in gigabytes. If both environment variables are set, MMTk will use the size in megabytes. To set a fixed heap size, simply set only the variables `MMTK_MAX_HSIZE` or `MMTK_MAX_HSIZE_G`, or set `MMTK_MIN_HSIZE` or `MMTK_MIN_HSIZE_G` to 0. Note that these values can be decimal numbers, e.g. `MMTK_MAX_HSIZE_G=1.5`.\n\nThese environment variables are set during julia initialization time, so they can be set per-julia process.\n \n### Further information\n\nMore about MMTk: https://github.com/mmtk/mmtk-core\n\nMore about Julia: https://github.com/JuliaLang/julia\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmtk%2Fmmtk-julia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmtk%2Fmmtk-julia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmtk%2Fmmtk-julia/lists"}