{"id":19184485,"url":"https://github.com/jhu-pl-lab/jaylang","last_synced_at":"2026-03-06T09:32:31.462Z","repository":{"id":47476251,"uuid":"281700619","full_name":"JHU-PL-Lab/jaylang","owner":"JHU-PL-Lab","description":"An implementation of semantic-type-guided bug finding","archived":false,"fork":false,"pushed_at":"2025-10-22T21:47:01.000Z","size":20184,"stargazers_count":10,"open_issues_count":6,"forks_count":4,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-10-22T23:35:22.329Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JHU-PL-Lab.png","metadata":{"files":{"readme":"README.md","changelog":"Changes","contributing":null,"funding":null,"license":"LICENSE","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":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-07-22T14:31:24.000Z","updated_at":"2025-09-25T19:10:46.000Z","dependencies_parsed_at":"2023-02-18T03:00:55.742Z","dependency_job_id":"4a8c927e-625d-4115-875e-43fcd4b5bae3","html_url":"https://github.com/JHU-PL-Lab/jaylang","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/JHU-PL-Lab/jaylang","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JHU-PL-Lab%2Fjaylang","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JHU-PL-Lab%2Fjaylang/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JHU-PL-Lab%2Fjaylang/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JHU-PL-Lab%2Fjaylang/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JHU-PL-Lab","download_url":"https://codeload.github.com/JHU-PL-Lab/jaylang/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JHU-PL-Lab%2Fjaylang/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30168984,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T07:56:45.623Z","status":"ssl_error","status_checked_at":"2026-03-06T07:55:55.621Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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-09T11:07:20.449Z","updated_at":"2026-03-06T09:32:31.451Z","avatar_url":"https://github.com/JHU-PL-Lab.png","language":"OCaml","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.13393058.svg)](https://doi.org/10.5281/zenodo.13393058)\n\nJay Lang\n=====\n\nThis is the codebase for the BlueJay language with its semantic-type-guided bug finder.\nThis code is developed by the JHU Programming Languages Lab.\n\nThis monorepo contains all tools built upon this language, which has recently be pruned\ndown to contain less code that is better-supported.\n\nThere is a snapshot that is the artifact for the paper **Semantic-Type-Guided Bug Finding** at SPLASH-OOPSLA 2024. Find it at the appropriate tag and release. Alternatively, checkout to the `oopsla-24` branch and follow the instructions there to recreate the results.\n\n# Getting Started Guide\n\nThe repo is tested under MacOS, Ubuntu, and WSL on Windows.\n\nAfter cloning the repository, make sure that the branch is switched to `main`.\n\n```\ngit clone https://github.com/JHU-PL-Lab/jaylang.git\ngit checkout main\n```\n\n## Install from docker\n\n```\ndocker build -t jaylang .\ndocker run -it jaylang\n```\n\nThis may be very slow. To limit memory usage, the dependencies are installed using only four processes. It may be faster to install from source.\n\nAfter installation, go to section `Run`.\n\n## Install from source\n\nPrepare and upgrade `apt` and the OCaml environment:\n\n```\nsudo apt upgrade opam\nopam update\n```\n\nInstall the local opam switch with the following command. Answer `yes` to all questions. It can take a while.\nThis command installs the dependencies of this project to opam. You are supposed \nto develop in this directory, as this switch is only active when you are in this directory.\n\n```\nopam switch create ./ 5.3.0\n```\n\nNote that this installs all of the necessary packages to build and run the project. However, you may want a few developer tools. We suggest you run the following to get developer tools:\n\n```\nopam user-setup install\nopam install utop ocaml-lsp-server ocamlformat\n```\n\nNow you are ready to develop in the project.\n\n## Run\n\n### Concolic evaluator\n\n```\nmake ceval\n```\n\nThis makes the executable to run the concolic evaluator on a BlueJay file.\nThe resulting executable, `ceval.exe`, can be used directly by running the \ncommand\n\n```\n./ceval.exe \u003csource_file\u003e.bjy\n```\n\nTry the `--help` flag to learn more about arguments to the executable.\n\n### Tests\n\n```\nmake test-all\n```\n\nThis makes the full tests suite for the concolic evaluator. The tests are found\nin the directory `test/bjy`. With this, the well-typed tests are run, which are\nexpected to take a long time.\n\nTo run only the interesting, ill-typed tests, where the concolic evaluator is\nexpected to find an error in the test program, run only the fast tests:\n\n```\nmake test-fast\n```\n\nNote this also runs any well-typed test that has no recursion and is expected to be\nproven well-typed quickly, and those for which the incompleteness of type-splaying\nand stubbing recursive types is not a problem and can be proven well-typed.\n\nTo check that the interpreter can run in all modes on all tests:\n\n```\nmake test-interp\n```\n\n### Benchmarks\n\n```\nmake cbenchmark\n```\n\nThis makes the benchmarks for the concolic evaluator. The results are printed to stdout\nin a LaTeX table format as is seen in Table 2 in Section 6.6 of the paper.\n\nTo run the benchmarks for other directories or to change the run settings, use command\nline arguments under a `ARGS=\"args here\"` argument. For example,\n\n```\nmake cbenchmark ARGS=\"--dirs 'test/bjy/oopsla-26-ill-typed test/bjy/soft-contract-ill-typed' --trials 100 -r\"\n```\n\nruns the concolic evaluator on all tests in the two directories for 100 trials, where the evaluation\nhas been randomized with the `-r` flag, and the results are combined into one table.\n\nAll benchmarks run are in the test suite. Success of each run is not confirmed during\nbenchmarking. Instead, use `make test-fast` to see the results or run the file individually\nwith `ceval.exe`. Results are deterministic by default (modulo small variations in timeout)\nand are therefore replicable.\n\nSuggested directories to benchmark (besides the default `test/bjy/oopsla-24-benchmarks-ill-typed`) include\n- `test/bjy/soft-contract-ill-typed`\n- `test/bjy/oopsla-24-tests-ill-typed`\n- `test/bjy/interp-ill-typed` (suggested to decrease trials from the default 50 due to longer run times)\n- `test/bjy/oopsla-26-ill-typed`\n\n### Profiling\n\nTo use landmarks to profile an executable, build with\n\n```\ndune build --instrument-with landmarks\n```\n\nThen run the executable with the `OCAML_LANDMARKS` environment variable set to `on`. For example:\n\n```\nOCAML_LANDMARKS=on ./ceval.exe ./bluejay_file.bjy\n```\n\n## Coding in Bluejay\n\nWrite Bluejay code in `.bjy` files. It's strongly recommended to use the syntax highlighter found\nin `bluejay-language/`. See the instructions there for how to install the highlighter as\na VS Code extension.\n\nThe features and syntax of Bluejay are informally but thoroughly documented in `docs/language/bluejay`.\nIt is recommended to look there to learn the language, and then refer to the many example programs\nin the test suite.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhu-pl-lab%2Fjaylang","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjhu-pl-lab%2Fjaylang","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhu-pl-lab%2Fjaylang/lists"}