CINXE.COM

OCaml Papers

<!DOCTYPE html> <html lang="en"> <head id="htmx-head"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content="A selection of papers grouped by popular categories."> <meta name="twitter:title" content="OCaml Papers"> <meta name="twitter:description" content="A selection of papers grouped by popular categories."> <meta name="twitter:image" content="https://ocaml.org/_/MWIyY2ZmMWM5YzdkYWNmYWI4NGQ0MDBjOGFiZTYxOTg/ocaml_org_social_media.png"> <meta property="og:site_name" content="OCaml"> <meta property="og:type" content="object"> <meta property="og:title" content="OCaml Papers"> <meta property="og:description" content="A selection of papers grouped by popular categories."> <meta name="og:image" content="https://ocaml.org/_/MWIyY2ZmMWM5YzdkYWNmYWI4NGQ0MDBjOGFiZTYxOTg/ocaml_org_social_media.png"> <meta name="theme-color" content="#fff" > <meta name="color-scheme" content="white"> <meta name="ahrefs-site-verification" content="6ff715b377cdcd566334b44ae8888791189ce24640c8a403eacdc3bcbaa9449b"> <link rel="canonical" href="https://ocaml.org/papers"> <link rel="icon" type="image/x-icon" href="/_/ZDJmMjgzN2NkZmJlMzgxNGQxMTMxNGVlMzk1NzZkN2I/favicon.ico"> <link rel="manifest" href="/manifest.json"> <link rel="stylesheet" href="/_/M2QzNTJkMGFlMzUxZDFkZDE4MDdjYzljNThkN2U1YjQ/css/main.css"> <link rel="stylesheet" href="/_/NmFjYjY5ZmIxYWRhMWQxMTQxODM4ZDEwYTgwMDcwNmI/vendors/font-files/inter.css"> <link rel="stylesheet" href="/_/YjM3OGY4YzIwN2E2ZmUxZTczOWVkNDQwZWRhMDU0MGM/vendors/font-files/roboto-mono.css"> <script defer src="/_/OWYyZDQyZjg4MTFlNWEzZjE4ZGY0YWM0OTU1NGEzYTI/vendors/alpine-clipboard.js"></script> <script defer src="/_/NGI1NjQzZjdkODY0MTY2MmViNThhM2VlZTYwMDk3NTI/vendors/alpine.min.js"></script> <script defer src="/_/YTNhODI2Yzg0Yzk4M2ZiNDcxYmRiYzdhY2FiN2Y0OWQ/vendors/htmx.min.js"></script> <script defer data-domain="ocaml.org" src="https://plausible.ci.dev/js/script.js"></script> <link rel="search" href="/opensearch.xml" type="application/opensearchdescription+xml" title="OCaml"> <title>OCaml Papers</title> </head> <body> <script> if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches)) { document.body.classList.add("dark"); } else { document.body.classList.remove("dark"); } </script> <header class="h-20 flex items-center bg-sand dark:bg-dark-background_navigation" x-data="{ open: false }"> <nav class="container-fluid wide header flex justify-between items-center gap-5 xl:gap-8"> <ul class="order-0 space space-x-5 xl:space-x-8 items-center flex text-content font-medium dark:text-title dark:text-opacity-60 dark:font-semibold"> <li style="width:132px"> <a href="/" class="block pb-2"> <img src="/_/MDBjN2M4YjIxY2Y1YWExZWE3Njk4M2FiZTg1NWZjNTM/logo-with-name.svg" width="132" alt="OCaml logo" class="dark:hidden"> <img src="/_/MTE3YWE5YzJlZmExNmYyMmI3ZmEwYjliMDEwNDBkMDY/logo-with-name-white.svg" width="132" alt="OCaml logo" class="hidden dark:inline"> </a> </li> </ul> <ul class="order-2 hidden lg:flex items-center"> <li> <form x-data="{ row: null, col: 0, max: 0, total: 0 }" @submit="if (row !== null) { window.location = document.getElementById('package-autocomplete-'+row+'-'+col).getAttribute('href'); $event.stopPropagation(); $event.preventDefault(); return false }" action="/packages/search" method="GET"> <div class="dropdown-container flex items-center justify-center h-10 rounded-md focus-within:outline-primary_25 dark:focus-within:outline-dark-primary_40 focus-within:outline focus-within:outline-2 lg:w-56 xl:w-80" tabindex="0"> <label for="q" class="sr-only">Search OCaml packages</label> <input type="search" name="q" placeholder="Search OCaml packages" @keydown.escape="$event.target.blur()" class="bg-white dark:bg-dark-card text-title dark:text-dark-title h-full w-full font-normal focus:border-primary dark:focus:border-dark-primary focus:ring-0 border-primary dark:border-dark-primary rounded-md rounded-r-none px-3 py-1 placeholder-text-content dark:placeholder:text-dark-content appearance-none focus:outline-none" @keydown.stop @keyup.down="if (row === null) { row = 0; col = 0; } else { row +=1; if (row > max) { row = max } }" @keyup.up="if (row !== null) { row -=1; if (row < 0) { row = null } }" @keyup.right="if (col < 1) col++" @keyup.left="if (col >= 1) col--" :aria-activedescendant="row !== null ? 'package-autocomplete-'+row+'-'+col : null" hx-get="/packages/autocomplete" hx-params="q" hx-trigger="keyup changed, search" hx-target="#header-search-results" hx-indicator="#header-search-indicator" autocomplete="off" > <button aria-label="search" class="h-full flex items-center justify-center rounded-r-md bg-primary dark:bg-dark-primary text-white dark:text-dark-white px-4" type="submit" ><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" /> </svg> </button> <div class="dropdown w-full lg:w-[32rem] xl:w-[32rem] z-10 absolute rounded-md mt-12 shadow-2xl top-1 p-2 bg-background dark:bg-dark-background shadow-3xl dark:outline dark:outline-1 dark:outline-primary"> <div id="header-search-results" aria-live="polite"></div> <a class="flex py-2 px-2 mx-2 gap-4 hover:bg-primary_nav_block_hover_10 dark:hover:bg-dark-primary_nav_block_hover_10 font-normal rounded-md text-primary dark:text-dark-primary" href="/api"> Standard Library API <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </div> </div> </form> </li> </ul> <ul class="order-1 mr-auto items-center hidden lg:flex font-medium dark:text-white dark:text-opacity-60 dark:font-semibold"> <li><a href="/docs" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-primary dark:text-dark-primary underline">Learn</a> </li> <li><a href="/tools" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">Tools</a> </li> <li><a href="/packages" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">Packages</a> </li> <li><a href="/community" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">Community</a> </li> <li><a href="/changelog" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">News</a> </li> <li><a href="/play" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">Play</a> </li> </ul> <ul class="order-3 hidden lg:flex items-center"> <li><a href="/docs/get-started" class="border border-primary dark:border-dark-primary text-primary dark:text-dark-primary font-bold py-2.5 px-7 whitespace-nowrap rounded">Get Started</a></li> </ul> <ul class="order-1 lg:hidden flex items-center"> <li class="h-12 w-12 hover:bg-primary_25 dark:hover:bg-primary_20 flex items-center justify-center rounded-full text-content dark:text-dark-title"> <button aria-label="open menu" @click="open = ! open"> <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 10h16M4 14h16M4 18h16" /> </svg> </button> </li> </ul> </nav> <div class="bg-black fixed w-full h-full left-0 top-0 opacity-60 z-40" x-show='open' x-cloak></div> <nav class="z-50 h-full fixed right-0 top-0 max-w-full w-96 bg-background dark:bg-dark-background shadow-lg" x-show="open" x-cloak @click.away="open = false" x-transition:enter="transition duration-200 ease-out" x-transition:enter-start="translate-x-full" x-transition:leave="transition duration-100 ease-in" x-transition:leave-end="translate-x-full"> <ul class="text-content p-6 font-semibold"> <li class="flex justify-between items-center"> <a href="/"> <img src="/_/MDBjN2M4YjIxY2Y1YWExZWE3Njk4M2FiZTg1NWZjNTM/logo-with-name.svg" width="132" alt="OCaml logo" class="dark:hidden"> <img src="/_/MTE3YWE5YzJlZmExNmYyMmI3ZmEwYjliMDEwNDBkMDY/logo-with-name-white.svg" width="132" alt="OCaml logo" class="hidden dark:inline"> </a> <div class="" x-on:click="open = false"> <button aria-label="close" class="text-content dark:text-dark-title"> <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> </svg> </button> </div> </li> <li class="mt-6 mb-3"> <form action="/packages/search" method="GET"> <div class="dropdown-container flex items-center justify-center h-10 rounded-md focus-within:outline-primary_25 dark:focus-within:outline-dark-primary_40 focus-within:outline focus-within:outline-2 " tabindex="0"> <label for="q" class="sr-only">Search OCaml packages</label> <input type="search" name="q" placeholder="Search OCaml packages" @keydown.escape="$event.target.blur()" class="bg-white dark:bg-dark-card text-title dark:text-dark-title h-full w-full font-normal focus:border-primary dark:focus:border-dark-primary focus:ring-0 border-primary dark:border-dark-primary rounded-md rounded-r-none px-3 py-1 placeholder-text-content dark:placeholder:text-dark-content appearance-none focus:outline-none" > <button aria-label="search" class="h-full flex items-center justify-center rounded-r-md bg-primary dark:bg-dark-primary text-white dark:text-dark-white px-4" type="submit" ><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" /> </svg> </button> </div> </form> </li> <li><a href="/docs" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-primary dark:text-dark-primary underline">Learn</a> </li> <li><a href="/tools" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">Tools</a> </li> <li><a href="/packages" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">Packages</a> </li> <li><a href="/community" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">Community</a> </li> <li><a href="/changelog" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">News</a> </li> <li><a href="/play" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">Play</a> </li> <li> <a href="/api" class="flex py-3 px-1 gap-4 font-semibold text-primary dark:text-dark-primary">Standard Library API<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </li> <li class="mt-3 mb-6"> <a href="/docs/get-started" class="w-full rounded font-normal py-3 px-7 flex items-center justify-center bg-primary dark:bg-dark-primary text-white dark:text-dark-title">Get started</a> </li> <li> <div class="space-x-6 text-2xl flex items-center"> <a aria-label="OCaml's Discord" href="https://discord.gg/cCYQbqN" class="opacity-60 hover:opacity-100 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M18.9419 5.29661C17.6473 4.69088 16.263 4.25066 14.8157 4C14.638 4.32134 14.4304 4.75355 14.2872 5.09738C12.7487 4.86601 11.2245 4.86601 9.7143 5.09738C9.57116 4.75355 9.3588 4.32134 9.17947 4C7.73067 4.25066 6.3448 4.6925 5.05016 5.29982C2.43887 9.24582 1.73099 13.0938 2.08493 16.8872C3.81688 18.1805 5.49534 18.9662 7.14548 19.4804C7.55291 18.9196 7.91628 18.3235 8.22931 17.6953C7.63313 17.4688 7.06211 17.1892 6.52256 16.8647C6.6657 16.7586 6.80571 16.6478 6.94098 16.5337C10.2318 18.0729 13.8074 18.0729 17.0589 16.5337C17.1958 16.6478 17.3358 16.7586 17.4774 16.8647C16.9362 17.1908 16.3637 17.4704 15.7675 17.697C16.0805 18.3235 16.4423 18.9212 16.8513 19.4819C18.503 18.9678 20.183 18.1822 21.915 16.8872C22.3303 12.4897 21.2056 8.67705 18.9419 5.29661ZM8.67765 14.5543C7.68977 14.5543 6.87963 13.632 6.87963 12.509C6.87963 11.3859 7.67247 10.4621 8.67765 10.4621C9.68285 10.4621 10.493 11.3843 10.4757 12.509C10.4772 13.632 9.68285 14.5543 8.67765 14.5543ZM15.3223 14.5543C14.3344 14.5543 13.5243 13.632 13.5243 12.509C13.5243 11.3859 14.3171 10.4621 15.3223 10.4621C16.3275 10.4621 17.1376 11.3843 17.1203 12.509C17.1203 13.632 16.3275 14.5543 15.3223 14.5543Z" clip-rule="evenodd" /> </svg> </a> <a aria-label="The OCaml Compiler on GitHub" href="https://github.com/ocaml/ocaml" class="opacity-60 hover:opacity-100 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" /> </svg> </a> <a aria-label="The OCaml Language Twitter Account" href="https://twitter.com/ocaml_org" class="opacity-60 hover:opacity-100 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" /> </svg> </a> </div> </li> </ul> </nav> </header> <script> window.addEventListener('keydown', function(event) { if (event.key === "/") { event.preventDefault(); document.querySelector("input[type='search']").focus() } }) </script> <main class="bg-background dark:bg-dark-background"><div class="intro-section-simple dark:dark-intro-section-simple"> <div class="container-fluid"> <div class="w-full m-auto"> <h1 class="font-bold text-title dark:text-dark-title mb-2"">Papers</h1> <p class="text-content dark:text-dark-content text-xl lg:max-w-[80%]"> With its strong academic roots, OCaml is known to be a spearhead in the development of Programming Language Theory. This page contains a selection of papers that have influenced OCaml and other functional programming languages. </p> </div> </div> </div> <div class="section-blue-gradient dark:dark-section-blue-gradient lg:py-12 py-8"> <div class="container-fluid"> <div class=" "> <div class=""> <h2 class="font-bold text-white dark:text-dark-title mb-8">Recommended Papers</h2> </div> <div class="grid grid-cols-1 lg:grid-cols-3 gap-10"> <a href="https://dl.acm.org/doi/10.1145/3453483.3454039" class="flex-1 p-6 pb-4 rounded-xl bg-white card dark:dark-card"> <div class="font-semibold text-base mb-3 text-title dark:text-dark-title"> Retrofitting Effect Handlers Onto OCaml </div> <div class="truncate text-content dark:text-dark-content"> Effect handlers have been gathering momentum as a mechanism for modular programming with user-defined effects. Effect handlers allow for non-local control flow mechanisms such as generators, async/await, lightweight threads, and coroutines to be composably expressed. We present a design and evaluate a full-fledged efficient implementation of effect handlers for OCaml, an industrial-strength multi-paradigm programming language. Our implementation strives to maintain the backwards compatibility and performance profile of existing OCaml code. Retrofitting effect handlers onto OCaml is challenging since OCaml does not currently have any non-local control flow mechanisms other than exceptions. Our implementation of effect handlers for OCaml: (i) imposes a mean 1% overhead on a comprehensive macro benchmark suite that does not use effect handlers; (ii) remains compatible with program analysis tools that inspect the stack; and (iii) is efficient for new code that makes use of effect handlers. </div> <div class="text-sm mt-3 text-content dark:text-dark-content"> K. C. Sivaramakrishnan, Stephen Dolan, Leo White, Tom Kelly, Sadiq Jaffer, Anil Madhavapeddy </div> <div class="flex mt-5 flex-wrap"> <div class="tag"> PLDI </div> <div class="tag"> effects </div> </div> </a> <a href="https://arxiv.org/pdf/1905.06543.pdf" class="flex-1 p-6 pb-4 rounded-xl bg-white card dark:dark-card"> <div class="font-semibold text-base mb-3 text-title dark:text-dark-title"> Extending OCaml&#x27;s `open` </div> <div class="truncate text-content dark:text-dark-content"> We propose a harmonious extension of OCaml&#x27;s `open` construct. OCaml&#x27;s existing construct `open M` imports the names exported by the module `M` into the current scope. At present `M` is required to be the path to a module. We propose extending `open` to instead accept an arbitrary module expression, making it possible to succinctly address a number of existing scope-related difficulties that arise when writing OCaml programs. </div> <div class="text-sm mt-3 text-content dark:text-dark-content"> Runhang Li, Jeremy Yallop </div> <div class="flex mt-5 flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> core </div> <div class="tag"> language </div> </div> </a> <a href="http://kcsrk.info/papers/pldi18-memory.pdf" class="flex-1 p-6 pb-4 rounded-xl bg-white card dark:dark-card"> <div class="font-semibold text-base mb-3 text-title dark:text-dark-title"> Bounding Data Races in Space and Time </div> <div class="truncate text-content dark:text-dark-content"> We propose a new semantics for shared-memory parallel programs that gives strong guarantees even in the presence of data races. Our local data race freedom property guar- antees that all data-race-free portions of programs exhibit sequential semantics. We provide a straightforward oper- ational semantics and an equivalent axiomatic model, and evaluate an implementation for the OCaml programming language. Our evaluation demonstrates that it is possible to balance a comprehensible memory model with a reasonable (no overhead on x86, ~0.6% on ARM) sequential performance trade-off in a mainstream programming language </div> <div class="text-sm mt-3 text-content dark:text-dark-content"> Stephen Dolan, KC Sivaramakrishnan, Anil Madhavapeddy </div> <div class="flex mt-5 flex-wrap"> <div class="tag"> PLDI </div> <div class="tag"> multicore </div> </div> </a> </div> </div> </div> </div> <div class="bg-background dark:bg-dark-background"> <div class="py-10 lg:py-28"> <div class="container-fluid"> <div class="flex justify-between items-center flex-col md:flex-row"> <h5 class="font-bold text-title dark:text-dark-title mb-5 md:mb-0">67 Papers</h5> <form action="/papers" method="GET"> <div class="dropdown-container flex items-center justify-center h-10 rounded-md focus-within:outline-primary_25 dark:focus-within:outline-dark-primary_40 focus-within:outline focus-within:outline-2 " tabindex="0"> <label for="q" class="sr-only">Search for a paper</label> <input type="search" name="q" placeholder="Search for a paper" @keydown.escape="$event.target.blur()" class="bg-white dark:bg-dark-card text-title dark:text-dark-title h-full w-full font-normal focus:border-primary dark:focus:border-dark-primary focus:ring-0 border-primary dark:border-dark-primary rounded-md rounded-r-none px-3 py-1 placeholder-text-content dark:placeholder:text-dark-content appearance-none focus:outline-none" value="" > <button aria-label="search" class="h-full flex items-center justify-center rounded-r-md bg-primary dark:bg-dark-primary text-white dark:text-dark-white px-4" type="submit" ><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" /> </svg> </button> </div> </form> </div> <div class="overflow-x-scroll lg:overflow-hidden mt-5 lg:mt-10"> <table class="max-w-5xl lg:max-w-full align-top block lg:table"> <thead class="hidden lg:table-header-group text-title dark:text-dark-title text-left rounded-xl"> <tr> <th class="py-4 px-6 rounded-l-lg text-x w-2/5">Title</th> <th class="py-4 px-6">Years</th> <th class="py-4 px-6 w-40">Tags</th> <th class="py-4 px-6 w-56">Authors</th> <th class="py-4 px-6 rounded-r-lg">Actions</th> </tr> </thead> <tbody class="block lg:table-row-group"> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Tail Modulo Cons, OCaml, and Relational Separation Logic </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Common functional languages incentivize tail-recursive functions, as opposed to general recursive functions that consume stack space and may not scale to large inputs. This distinction occasionally requires writing functions in a tail-recursive style that may be more complex and slower than the natural, non-tail-recursive definition. This work describes our implementation of the tail modulo constructor (TMC) transformation in the OCaml compiler, an optimization that provides stack-efficiency for a larger class of functions—tail-recursive modulo constructors—which includes in particular the natural definition of `List.map` and many similar recursive data-constructing functions. We prove the correctness of this program transformation in a simplified setting—a small untyped calculus—that captures the salient aspects of the OCaml implementation. Our proof is mechanized in the Coq proof assistant, using the Iris base logic. An independent contribution of our work is an extension of the Simuliris approach to define simulation relations that support different calling conventions. To our knowledge, this is the first use of Simuliris to prove the correctness of a compiler transformation. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2025 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> popl </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Clément Allain</li> <li>Frédéric Bour</li> <li>Basile Clément</li> <li>François Pottier</li> <li>Gabriel Scherer</li> </td> <td class="py-4 px-6 align-top"> <a href="https://arxiv.org/abs/2411.19397" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Efficient OCaml Compilation with Flambda 2 </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Flambda 2 is an IR and optimisation pass for OCaml centred around inlining. We discuss the engineering constraints that shaped it and the overall structure that allows the compiler to be fast enough to handle very large industrial code bases. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2023 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> Flambda 2 </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Vincent Laviron</li> <li>Pierre Chambart</li> <li>Mark Shinwell</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp23.sigplan.org/details/ocaml-2023-papers/8/Efficient-OCaml-compilation-with-Flambda-2" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Flambda 2 Types: An Abstract Domain for Static Analysis of Functional Programs </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this talk, we will present an overview of the abstract domains that drive the Flambda 2 optimiser for OCaml programs. Like most optimising compilers, Flambda 2 relies on static analysis to find optimisation opportunities. There are several different analyses that are actually performed. Here we will focus on a forward value analysis that we call Flambda 2 Types. Despite its name, it fits quite well the definition of an abstract domain (in the sense of abstract interpretation), and it is through that angle that we will introduce it. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2023 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> Flambda 2 </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Vincent Laviron</li> <li>Pierre Chambart</li> <li>Mark Shinwell</li> </td> <td class="py-4 px-6 align-top"> <a href="https://www.youtube.com/live/M5M3f31pxns?si=9Gb8ivCqOjbF9tqB&amp;t=28242" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> <a href="https://icfp23.sigplan.org/details/ocaml-2023-papers/9/Flambda-2-Types-An-abstract-domain-for-static-analysis-of-functional-programs" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Unboxed Data Constructors: Or, How cpp Decides a Halting Problem </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> We propose a new language feature for ML-family languages, the ability to selectively unbox certain data constructors, so that their runtime representation gets compiled away to just the identity on their argument. Unboxing must be statically rejected when it could introduce confusion, that is, distinct values with the same representation. We discuss the use-case of big numbers, where unboxing allows to write code that is both efficient and safe, replacing either a safe but slow version or a fast but unsafe version. We explain the static analysis necessary to reject incorrect unboxing requests. We present our prototype implementation of this feature for the OCaml programming language, discuss several design choices and the interaction with advanced features such as Guarded Algebraic Datatypes. Our static analysis requires expanding type definitions in type expressions, which is not necessarily normalizing in presence of recursive type definitions. In other words, we must decide normalization of terms in the first-order λ-calculus with recursion. We provide an algorithm to detect non-termination on-the-fly during reduction, with proofs of correctness and completeness. Our algorithm turns out to be closely related to the normalization strategy for macro expansion in the cpp preprocessor. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2023 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> icfp </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Nicolas Chataing</li> <li>Stephen Dolan</li> <li>Gabriel Scherer</li> <li>Jeremy Yallop</li> </td> <td class="py-4 px-6 align-top"> <a href="https://dl.acm.org/doi/10.1145/3632893" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Wasocaml: A Compiler From OCaml to WebAssembly </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this presentation, we will explore the compilation of garbage-collected languages, such as Java or OCaml, to WebAssembly (Wasm). The limitations of JavaScript as the web’s default language led to the development of Wasm, a secure and predictable-performance modular language. However, compiling garbage-collected languages to Wasm presents challenges, including the need to compile or re-implement the runtime and difficulties in transferring verified properties. Various techniques for representing values in memory are discussed, with a focus on OCaml’s approach. An extension called Wasm-GC is introduced, enabling the compilation of garbage-collected languages to Wasm by incorporating features like `int31` and garbage-collected structs. The paper presents Wasocaml, a complete OCaml compiler for Wasm-GC, and discusses benchmarks and future work in compiling garbage-collected languages to WebAssembly. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2023 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> wasm </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Léo Andrès</li> <li>Pierre Chambart</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp23.sigplan.org/details/ocaml-2023-papers/13/Wasocaml-a-compiler-from-OCaml-to-WebAssembly" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Supporting a Decade of Opam </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Opam 1.2 was released in 2014. It was four years before opam 2.0 succeeded it, and another three for opam 2.1. The release of opam 2.2 is imminent and will have arrived just a year after its predecessor. This talk presents features added to opam 2.1 intended to make dealing with multiple versions of opam easier. We see how small additional metadata, both stored in `.opam` “roots” and also added to opam’s command line to provide opam’s developers with the chance to add new features more easily, with confidence that users will be able to upgrade safely. In presenting this, we’ll also trumpet some of what we think are the amazing new features of opam 2.1 (and 2.2) and why we think you should keenly watch for new releases and upgrade immediately on release! </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2022 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> opam </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>David Allsopp</li> <li>Raja Boujbel</li> <li>Kate Deplaix</li> <li>Louis Gesbert</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/1rWj4jYyaDkmMjdH4KNcv6" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A Separation Logic for Effect Handlers </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> User-defined effects and effect handlers are advertised and advocated as a relatively easy-to-understand and modular approach to delimited control. They offer the ability of suspending and resuming a computation and allow information to be transmitted both ways between the computation, which requests a certain service, and the handler, which provides this service. Yet, a key question remains, to this day, largely unanswered: how does one modularly specify and verify programs in the presence of both user-defined effect handlers and primitive effects, such as heap-allocated mutable state? We answer this question by presenting a Separation Logic with built-in support for effect handlers, both shallow and deep. The specification of a program fragment includes a protocol that describes the effects that the program may perform as well as the replies that it can expect to receive. The logic allows local reasoning via a frame rule and a bind rule. It is based on Iris and inherits all of its advanced features, including support for higher-order functions, user-defined ghost state, and invariants. We illustrate its power via several case studies, including (1) a generic formulation of control inversion, which turns a producer that ``pushes&#x27;&#x27; elements towards a consumer into a producer from which one can ``pull&#x27;&#x27; elements on demand, and (2) a simple system for cooperative concurrency, where several threads execute concurrently, can spawn new threads, and communicate via promises. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2021 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> popl </div> <div class="tag"> effects </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Paulo Emílio de Vilhena</li> <li>François Pottier</li> </td> <td class="py-4 px-6 align-top"> <a href="https://doi.org/10.1145/3434314" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A practical mode system for recursive definitions </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In call-by-value languages, some mutually-recursive definitions can be safely evaluated to build recursive functions or cyclic data structures, but some definitions (let rec x = x + 1) contain vicious circles and their evaluation fails at runtime. We propose a new static analysis to check the absence of such runtime failures. We present a set of declarative inference rules, prove its soundness with respect to the reference source-level semantics of Nordlander, Carlsson, and Gill [2008], and show that it can be directed into an algorithmic backwards analysis check in a surprisingly simple way. Our implementation of this new check replaced the existing check used by the OCaml programming language, a fragile syntactic criterion which let several subtle bugs slip through as the language kept evolving. We document some issues that arise when advanced features of a real-world functional language (exceptions in first-class modules, GADTs, etc.) interact with safety checking for recursive definitions. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2021 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> popl </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Alban Reynaud</li> <li>Gabriel Scherer</li> <li>Jeremy Yallop</li> </td> <td class="py-4 px-6 align-top"> <a href="https://dl.acm.org/doi/10.1145/3434326" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Digodoc and Docs </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this talk, we will introduce a new tool called digodoc, that builds a graph of an opam switch, associating files, libraries, and opam packages into a cyclic graph of inclusions and dependencies. We will then explain how we used that tool to build a documentation website that displays the generated documentation of a large set of opam packages from the official opam repository. Thanks to digodoc, users can easily navigate between module documentations, sources, packages, and libraries. We think it is an interesting contribution to the OCaml ecosystem. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2021 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Mohamed Hernouf</li> <li>Fabrice Le Fessant</li> <li>Thomas Blanc</li> <li>Louis Gesbert</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/db6ed2c4-e940-4d5f-82ee-d3d20eb4ceb7" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Formal Verification of a Concurrent Bounded Queue in a Weak Memory Model </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> We use Cosmo, a modern concurrent separation logic, to formally specify and verify an implementation of a multiple-producer multiple-consumer concurrent queue in the setting of the Multicore OCaml weak memory model. We view this result as a demonstration and experimental verification of the manner in which Cosmo allows modular and formal reasoning about advanced concurrent data structures. In particular, we show how the joint use of logically atomic triples and of Cosmo&#x27;s views makes it possible to describe precisely in the specification the interaction between the queue library and the weak memory model. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2021 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> icfp </div> <div class="tag"> multicore </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Glen Mével</li> <li>Jacques-Henri Jourdan</li> </td> <td class="py-4 px-6 align-top"> <a href="https://doi.org/10.1145/3473571" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Retrofitting Effect Handlers Onto OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Effect handlers have been gathering momentum as a mechanism for modular programming with user-defined effects. Effect handlers allow for non-local control flow mechanisms such as generators, async/await, lightweight threads, and coroutines to be composably expressed. We present a design and evaluate a full-fledged efficient implementation of effect handlers for OCaml, an industrial-strength multi-paradigm programming language. Our implementation strives to maintain the backwards compatibility and performance profile of existing OCaml code. Retrofitting effect handlers onto OCaml is challenging since OCaml does not currently have any non-local control flow mechanisms other than exceptions. Our implementation of effect handlers for OCaml: (i) imposes a mean 1% overhead on a comprehensive macro benchmark suite that does not use effect handlers; (ii) remains compatible with program analysis tools that inspect the stack; and (iii) is efficient for new code that makes use of effect handlers. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2021 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> PLDI </div> <div class="tag"> effects </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>K. C. Sivaramakrishnan</li> <li>Stephen Dolan</li> <li>Leo White</li> <li>Tom Kelly</li> <li>Sadiq Jaffer</li> <li>Anil Madhavapeddy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://dl.acm.org/doi/10.1145/3453483.3454039" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> `opam-bin`: Binary Packages With opam </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this talk, we will present `opam-bin`, an opam plugin that builds binary opam packages on the fly to speed-up reinstallation of packages. `opam-bin` also creates opam repositories for these binary packages in order to make them easy to share with other users. We will show how it works and how to use it on a daily basis. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2021 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Fabrice Le Fessant</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp21.sigplan.org/details/ocaml-2021-papers/5/Opam-bin-Binary-Packages-with-Opam" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A Declarative Syntax Definition for OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this talk we present our work on a syntax definition for the OCaml language in the syntax definition formalism SDF3. SDF3 supports high-level definition of concrete and abstract syntax through declarative disambiguation and definition of constructors, enabling a direct mapping to abstract syntax. Based on the SDF3 syntax definition, the Spoofax language workbench produces a complete syntax aware editor with a parser, syntax checking, parse error recovery, syntax highlighting, formatting with correct parenthesis insertion, and syntactic completion. The syntax definition should provide a good basis for experiments with the design of OCaml and the development of further tooling. In the talk we will highlight interesting aspects the syntax definition, discuss issues we encountered in the syntax of OCaml, and demonstrate the editor. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Luis Eduardo de Souza Amorim</li> <li>Eelco Visser</li> </td> <td class="py-4 px-6 align-top"> <a href="https://eelcovisser.org/talks/2020/08/28/ocaml/" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A Simple State-Machine Framework for Property-Based Testing in OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Since their inception state-machine frameworks have proven their worth by finding defects in everything from the underlying AUTOSAR components of Volvo cars to digital invoicing sys- tems. These case studies were carried out with Erlang’s commercial QuickCheck state-machine framework from Quviq, but such frameworks are now also available for Haskell, F#, Scala, Elixir, Java, etc. We present a typed state-machine framework for OCaml based on the QCheck library and illustrate a number concepts common to all such frameworks: state modeling, commands, interpreting commands, preconditions, and agreement checking. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jan Midtgaard</li> </td> <td class="py-4 px-6 align-top"> <a href="https://janmidtgaard.dk/papers/Midtgaard%3AOCaml20.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> AD-OCaml: Algorithmic Differentiation for OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> AD-OCaml is a library framework for calculating mathematically exact derivatives and deep power series approximations of almost arbitrary OCaml programs via algorithmic differentiation. Unlike similar frameworks, this includes programs with side effects, aliasing, and programs with nested derivative operators. The framework also offers implicit parallelisation of both user programs and their transformations. The presentation will provide a short introduction to the mathematical problem, the difficulties of implementing a solution, the design of the library, and a demonstration of its capabilities. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Markus Mottl</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/12/AD-OCaml-Algorithmic-Differentiation-for-OCaml" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> API Migration: Compare Transformed </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this talk we describe our experience in using an automatic API-migration strategy dedicated at changing the signatures of OCaml functions, using the Rotor refactoring tool for OCaml. We perform a case study on open source Jane Street libraries by using Rotor to refactor comparison functions so that they return a more precise variant type rather than an integer. We discuss the difficulties of refactoring the Jane Street code base, which makes extensive use of PPX macros, and ongoing work implementing new refactorings. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Joseph Harrison</li> <li>Steven Varoumas</li> <li>Simon Thompson</li> <li>Reuben Rowe</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/7/API-migration-compare-transformed" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> <a href="https://www.cs.kent.ac.uk/people/staff/sjt/Pubs/OCaml_workshop2020.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Cosmo : A Concurrent Separation Logic for Multicore OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Multicore OCaml extends OCaml with support for shared-memory concurrency. It is equipped with a weak memory model, for which an operational semantics has been published. This begs the question: what reasoning rules can one rely upon while writing or verifying Multicore OCaml code? To answer it, we instantiate Iris, a modern descendant of Concurrent Separation Logic, for Multicore OCaml. This yields a low-level program logic whose reasoning rules expose the details of the memory model. On top of it, we build a higher-level logic, Cosmo, which trades off some expressive power in return for a simple set of reasoning rules that allow accessing nonatomic locations in a data-race-free manner, exploiting the sequentially-consistent behavior of atomic locations, and exploiting the release/acquire behavior of atomic locations. Cosmo allows both low-level reasoning, where the details of the Multicore OCaml memory model are apparent, and high-level reasoning, which is independent of this memory model. We illustrate this claim via a number of case studies: we verify several implementations of locks with respect to a classic, memory-model-independent specification. Thus, a coarse-grained application that uses locks as the sole means of synchronisation can be verified in the Concurrent-Separation-Logic fragment of Cosmo, without any knowledge of the weak memory model. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> icfp </div> <div class="tag"> multicore </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Glen Mével</li> <li>Jacques-Henri Jourdan</li> <li>François Pottier</li> </td> <td class="py-4 px-6 align-top"> <a href="https://doi.org/10.1145/3408978" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Irmin v2 </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Irmin is an OCaml library for building distributed databases with the same design principles as Git. Existing Git users will find many familiar features: branching/merging, immutable causal history for all changes, and the ability to restore to any previous state. Irmin v2 adds new accessibility methods to the store: we can now use Irmin from a CLI, or in a browser using `irmin-graphql`. It also has a new backend, `irmin-pack`, which is optimised for space usage and is used by the Tezos blockchain. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Clément Pascutto</li> <li>Ioana Cristescu</li> <li>Craig Ferguson</li> <li>Thomas Gazagnaire</li> <li>Romain Liautaud</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/10/Irmin-v2" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> <a href="https://tarides.com/blog/2019-11-21-irmin-v2" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> LexiFi Runtime Types </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> LexiFi maintains an OCaml compiler extension that enables introspection through runtime type representations. Recently, we implemented a syntax extension (PPX) that enables the use of LexiFi runtime types on vanilla compilers. We propose to present our publicly available runtime types and their features. Most notably, we want to present a mechanism for pattern matching on runtime types with holes. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Patrik Keller</li> <li>Marc Lasson</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/9/LexiFi-Runtime-Types" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> <a href="https://informationsecurity.uibk.ac.at/pdfs/KL2020_LexiFi_Runtime_Types_OCAML.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://www.lexifi.com/blog/ocaml/runtime-types/" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> OCaml Under the Hood: SmartPy </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> SmartPy is a complete system to develop smart-contracts for the Tezos blockchain. It is an embedded EDSL in Python to write contracts and their tests scenarios. It includes an online IDE, a chain explorer, and a command line interface. Python is used to generate programs in an imperative, type inferred, intermediate language called SmartML. SmartML is also the name of the OCaml library which provides an interpreter, a compiler to Michelson (the smart-contract language of Tezos), as well as a scenario “on-chain” interpreter. The IDE uses a mix of OCaml built with `js_of_ocaml` and pure Javascript. The command line interface also builds with `js_of_ocaml` to run on Node.js. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Sebastien Mondet</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/11/OCaml-Under-The-Hood-SmartPy" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> <a href="https://wr.mondet.org/paper/smartpy-ocaml-2020.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> OCaml-CI: A Zero-Configuration CI </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> OCaml-CI is a CI service for OCaml projects. It uses metadata from the project’s opam and `dune` files to work out what to build, and it uses caching to make builds fast. It automatically tests projects against multiple OCaml versions and OS platforms. The CI has been deployed on around 50 projects so far on GitHub, and many of them see response times an order of magnitude quicker than with less integrated CI solutions. This talk will introduce the CI service and then look at some of the technologies used to build it. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Thomas Leonard</li> <li>Craig Ferguson</li> <li>Kate Deplaix</li> <li>Magnus Skjegstad</li> <li>Anil Madhavapeddy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/6/OCaml-CI-A-Zero-Configuration-CI" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Parallelising Your OCaml Code with Multicore OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> With the availability of multicore variants of the recent OCaml versions (4.10 and 4.11) that maintain backwards compatibility with the existing OCaml C-API, there has been increasing interest in the wider OCaml community for parallelising existing OCaml code. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Sadiq Jaffer</li> <li>Sudha Parimala</li> <li>KC Sivaramarkrishnan</li> <li>Tom Kelly</li> <li>Anil Madhavapeddy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://github.com/ocaml-multicore/multicore-talks/blob/master/ocaml2020-workshop-parallel/multicore-ocaml20.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/5/Parallelising-your-OCaml-Code-with-Multicore-OCaml" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Retrofitting Parallelism onto OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> OCaml is an industrial-strength, multi-paradigm programming language, widely used in industry and academia. OCaml is also one of the few modern managed system programming languages to lack support for shared memory parallel programming. This paper describes the design, a full-fledged implementation and evaluation of a mostly-concurrent garbage collector (GC) for the multicore extension of the OCaml programming language. Given that we propose to add parallelism to a widely used programming language with millions of lines of existing code, we face the challenge of maintaining backwards compatibility -- not just in terms of the language features but also the performance of single-threaded code running with the new GC. To this end, the paper presents a series of novel techniques and demonstrates that the new GC strikes a balance between performance and feature backwards compatibility for sequential programs and scales admirably on modern multicore processors. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ICFP </div> <div class="tag"> multicore </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>KC Sivaramakrishnan</li> <li>Stephen Dolan</li> <li>Leo White</li> <li>Sadiq Jaffer</li> <li>Tom Kelly</li> <li>Anmol Sahoo</li> <li>Sudha Parimala</li> <li>Atul Dhiman</li> <li>Anil Madhavapeddy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://dl.acm.org/doi/10.1145/3408995" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> The Final Pieces of the OCaml Documentation Puzzle </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> `odoc` is the latest attempt at creating a documentation tool which handles the full complexity of the OCaml language. It has been a long time coming as tackling both the module system and rendering into rich documents makes for a difficult task. Nevertheless we believe the two recent developments provides the final pieces of the OCaml documentation puzzle. This two improvements split `odoc` in two layers: a model layer, with a deep understanding of the module system, and a document layer allowing for easy definition of new outputs. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jonathan Ludlam</li> <li>Gabriel Radanne</li> <li>Leo White</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/4/The-final-pieces-of-the-OCaml-documentation-puzzle" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> The ImpFS Filesystem </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This proposal describes a presentation to be given at the OCaml’20 workshop. The presentation will cover a new OCaml filesystem, ImpFS, and the related libraries. The filesystem makes use of a B-tree library presented at OCaml’17 and a key-value store presented at ML’19. In addition, there are a number of other support libraries that may be of interest to the community. ImpFS represents a single point in the filesystem design space, but we hope that the libraries we have developed will enable others to build further filesystems with novel features. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Tom Ridge</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/8/The-ImpFS-filesystem" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Types in Amber </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Coda is a new cryptocurrency that uses zk-SNARKs to dramatically reduce the size of data needed by nodes running its protocol. Nodes communicate in a format automatically derived from type definitions in OCaml source files. As the Coda software evolves, these formats for sent data may change. We wish to allow nodes running older versions of the software to communicate with newer versions. To achieve that, we identify stable types that must not change over time, so that their serialisations also do not change. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2020 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Paul Steckler</li> <li>Matthew Ryan</li> </td> <td class="py-4 px-6 align-top"> <a href="https://icfp20.sigplan.org/details/ocaml-2020-papers/3/Types-in-amber" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Chemoinformatics and Structural Bioinformatics in OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this article, we share our experience in prototyping chemoinformatics and structural bioinformatics software in OCaml </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2019 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> industrial </div> <div class="tag"> application </div> <div class="tag"> bioinformatics </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>François Berenger</li> <li>Kam Y. J. Zhang</li> <li>Yoshihiro Yamanishi</li> </td> <td class="py-4 px-6 align-top"> <a href="https://jcheminf.biomedcentral.com/articles/10.1186/s13321-019-0332-0" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Extending OCaml&#x27;s `open` </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> We propose a harmonious extension of OCaml&#x27;s `open` construct. OCaml&#x27;s existing construct `open M` imports the names exported by the module `M` into the current scope. At present `M` is required to be the path to a module. We propose extending `open` to instead accept an arbitrary module expression, making it possible to succinctly address a number of existing scope-related difficulties that arise when writing OCaml programs. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2019 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> core </div> <div class="tag"> language </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Runhang Li</li> <li>Jeremy Yallop</li> </td> <td class="py-4 px-6 align-top"> <a href="https://arxiv.org/pdf/1905.06543.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Bounding Data Races in Space and Time </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> We propose a new semantics for shared-memory parallel programs that gives strong guarantees even in the presence of data races. Our local data race freedom property guar- antees that all data-race-free portions of programs exhibit sequential semantics. We provide a straightforward oper- ational semantics and an equivalent axiomatic model, and evaluate an implementation for the OCaml programming language. Our evaluation demonstrates that it is possible to balance a comprehensible memory model with a reasonable (no overhead on x86, ~0.6% on ARM) sequential performance trade-off in a mainstream programming language </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2018 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> PLDI </div> <div class="tag"> multicore </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Stephen Dolan</li> <li>KC Sivaramakrishnan</li> <li>Anil Madhavapeddy</li> </td> <td class="py-4 px-6 align-top"> <a href="http://kcsrk.info/papers/pldi18-memory.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Merlin: A Language Server for OCaml (Experience Report) </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> We report on the experience of developing Merlin, a language server for the OCaml programming language in development since 2013. Merlin is a daemon that connects to your favourite text editor and provides services that require a fine-grained understanding of the programming language syntax and static semantics: instant feedback on warnings and errors, autocompletion, &#x27;type of the code under the cursor&#x27;, &#x27;go to definition&#x27;, etc. Language servers need to handle incomplete and partially-incorrect programs, and try to be incremental to minimize recomputation after small editing actions. Merlin was built by carefully adapting the existing tools (the OCamllex lexer and Menhir parser generators) to better support incrementality, incompleteness and error handling. These extensions are elegant and general, as demonstrated by the interesting, unplanned uses that the OCaml community found for them. They could be adapted to other frontends -- in any language. Besides incrementality, we discuss the way Merlin communicates with editors, describe the design decisions that went into some demanding features and report on some of the non-apparent difficulties in building good editor support, emerging from expressive programming languages or frustrating tooling ecosystems. We expect this experience report to be of interest to authors of interactive language tooling for any programming language; many design choices may be reused, and some hard-won lessons can serve as warnings. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2018 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> icfp </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Frédéric Bour</li> <li>Thomas Refis</li> <li>Gabriel Scherer</li> </td> <td class="py-4 px-6 align-top"> <a href="https://dl.acm.org/doi/10.1145/3236798" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A Memory Model for Multicore OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> We propose a memory model for OCaml, broadly following the design of axiomatic memory models for languages such as C++ and Java, but with a number of differences to provide stronger guarantees and easier reasoning to the programmer, at the expense of not admitting every possible optimisation. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2017 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> multicore </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Stephen Dolan</li> <li>KC Sivaramakrishnan</li> </td> <td class="py-4 px-6 align-top"> <a href="https://kcsrk.info/papers/memory_model_ocaml17.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Eff Directly in OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> The language Eff is an OCaml-like language serving as a prototype implementation of the theory of algebraic effects, intended for experimentation with algebraic effects on a large scale. We present the embedding of Eff into OCaml, using the library of delimited continuations or the Multicore OCaml branch. We demonstrate the correctness of the embedding denotationally, relying on the tagless-final-style interpreter-based denotational semantics, including the novel, direct denotational semantics of multi-prompt delimited control. The embedding is systematic, lightweight, performant, and supports even higher-order, &#x27;dynamic&#x27; effects with their polymorphism. OCaml thus may be regarded as another implementation of Eff, broadening the scope and appeal of that language. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2016 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> core </div> <div class="tag"> language </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Oleg Kiselyov</li> <li>KC Sivaramakrishnan</li> </td> <td class="py-4 px-6 align-top"> <a href="https://arxiv.org/pdf/1812.11664.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Learn OCaml: An Online Learning Center for OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> We present Learn OCaml, a Web application that packs a set of learning activities for people who want to learn OCaml. It includes an integrated and reworked version of the venerable Try OCaml and an exercise environment with automated grading derived from the one developed for the OCaml MOOC. It works entirely in the browser, the server being used for storing static files and synchronising between different devices. A special effort has been made to make it usable on tablets and even mobiles. A main public instance will be hosted at OCamlPro, but the project is open-source, and universities can host their own version on site. We will also provide a public repository for teachers to contribute lessons and exercises. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2016 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Benjamin Canou</li> <li>Grégoire Henry</li> <li>Çagdas Bozman</li> <li>Fabrice Le Fessant</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/uWJvzik5LKSTkroghup5oJ" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> <a href="https://inria.hal.science/hal-01352015v1" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> The State of the OCaml Platform: September 2016 </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Louis Gesbert covers the current state of the OCaml Platform in September 2016. Introducing the game-changing integrations to opam 2.0, the roadmap, and many more an aspects of the OCaml Platform as a whole like `opam-publish`. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2016 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Louis Gesbert, on behalf of the OCaml Platform team</li> <li>Anil Madhavapeddy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/c386fc95-092e-4ea7-9317-91edf287fea6" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Global Semantic Analysis on OCaml programs </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> We present an ongoing project at OCamlPro, the development of a semantic analyser of OCaml code based on abstract interpretation techniques. This analysis relies on the presence of the whole program at compile time, it should work on full actual programs and shows interesting promises in terms of uncaught exceptions detection. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2015 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Thomas Blanc</li> <li>Pierre Chambart</li> <li>Michel Mauny</li> <li>Fabrice Le Fessant</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/e1a22cf8-5522-4c05-a8d4-af445bc73556" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Towards A Debugger for Native-Code OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this talk, we will present a starting project at OCamlPro, the development of a debugging framework for OCaml native-code applications, based on the LLDB Debugger, a debugger built on top of the LLVM framework. We implemented a complete binding of LLDB C++ API for OCaml, and then used it to build several tools, one &quot;generic&quot; debugger, and two small utilities to monitor the memory behavior of OCaml applications. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2015 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Fabrice Le Fessant</li> <li>Pierre Chambart</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/e1a22cf8-5522-4c05-a8d4-af445bc73556" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> <a href="https://inria.hal.science/hal-01245840v1" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A Proposal for Non-Intrusive Namespaces in OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> We present a work-in-progress about adding namespaces to OCaml. Inspired by other languages such as Scala or C++, our aim is to design and formalise a simple and non-intrusive namespace mechanism without complexifying the core language. Namespaces in our approach are a simple way to define libraries while avoiding name clashes. They are also meant to simplify the build process, clarifying and reducing (to zero whenever possible) the responsibility of external tools. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2014 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Pierrick Couderc</li> <li>Fabrice Le Fessant</li> <li>Benjamin Canou</li> <li>Pierre Chambart</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/ded6e8bb-aebd-4fd2-989f-3f0b2b8efaf3" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> <a href="https://inria.hal.science/hal-01091173v1" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> The OCaml Platform v1.0 </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> The OCaml Platform combines the OCaml compiler toolchain with a coherent set of tools for build, documentation, testing, and IDE integration. The project is a collaborative effort across the OCaml community, tied together by the OCaml Labs group in Cambridge and with other major contributors listed above. The requirements of the Platform are being guided by the industrial OCaml Consortium (primarily Jane Street, Citrix, and Lexifi). This talk follows up the OCaml 2013 talk that introduced the Platform. Since then, many tools have been released in parallel via the opam package manager, and this year’s talk will demonstrate the concrete workflow that ties them together (see Figure 2). We will first recap the Platform ethos briefly, update on the opam package manager v1.2 and conclude with the Platform workflow. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2014 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Anil Madhavapeddy</li> <li>Amir Chaudhry</li> <li>Jeremie Diminio</li> <li>Thomas Gazagnaire</li> <li>Louis Gesbert</li> <li>Thomas Leonard</li> <li>David Sheets</li> <li>Mark Shinwell</li> <li>Leo White</li> <li>Jeremy Yallop</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/37eaef0e-d826-4452-bf84-f04244a85ce9" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Improving OCaml High-Level Optimisations </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> I spend a lot of time hacking the OCaml compiler. Hence when I write some code, I have a good glimpse of what the generated assembly will look like. This is nice when I want to write performance sensitive code, but as I usually write code for which execution time doesn&#x27;t matter much, this mainly tends to torture me. A small voice in my head is telling me &quot;you shouldn&#x27;t write it like that, you known you could avoid this allocation.&quot; And usually, following that indication would only tend to make the code less readable. But there is a solution to calm that voice\: making the compiler smarter than me. OCaml compilation mechanisms are quite predictable. There is no dark magic to replace your ugly code by a well-behaving one, but it always generates reasonably efficient code. This is a good thing in general, as you won&#x27;t be surprised by code running more slowly than what you usually expect. But it does not behave very well with dumb code. This may not often seem like a problem with code written by humans, but generated code, for example coming from camlp4/ppx, or compiled from another language to OCaml, may fall into that category. In fact, there is another common source for non-human written code: inlining. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2013 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> optimisation </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Pierre Chambart</li> </td> <td class="py-4 px-6 align-top"> <a href="https://github.com/ocaml/v2.ocaml.org/blob/master/site/meetings/ocaml/2013/proposals/optimizations.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://github.com/ocaml/v2.ocaml.org/blob/master/site/meetings/ocaml/2013/slides/chambart.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> OCamlot: OCaml Online Testing </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> OCamlot provides a distributed, continuous testing service for opam package quality and compatibility. Using signals from GitHub, OCamlot ensures that, before being merged, patches submitted to the opam repository are thoroughly tested on the variety of supported configurations, architectures, and systems. The resulting improved build and metadata quality in turn speeds up development on other aspects of the Platform through earlier error feedback. A high-quality package repository is also very important for new user retention. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2013 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>David Sheets</li> <li>Anil Madhavapeddy</li> <li>Amir Chaudhry</li> <li>Thomas Gazagnaire</li> </td> <td class="py-4 px-6 align-top"> <a href="https://github.com/ocaml/v2.ocaml.org/blob/master/site/meetings/ocaml/2013/proposals/ocamlot.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://github.com/ocaml/v2.ocaml.org/blob/master/site/meetings/ocaml/2013/slides/sheets.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Profiling the Memory Usage of OCaml Applications Without Changing Their Behavior </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this paper, we present the current state of our work on profiling the memory usage of OCaml programs. Our technique allows to observe track types, allocation points, and reachability paths of blocks with no runtime cost, except for saving the observations. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2013 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Çagdas Bozman</li> <li>Michel Mauny</li> <li>Fabrice Le Fessant</li> <li>Thomas Gazagnaire</li> </td> <td class="py-4 px-6 align-top"> <a href="https://github.com/ocaml/v2.ocaml.org/blob/master/site/meetings/ocaml/2013/slides/bozman.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF Slides </a> <a href="https://inria.hal.science/hal-01095305v1" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> OCamlPro: Promoting OCaml Use in Industry </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> One year after the foundation of OCamlPro, Fabrice Le Fessant presents at the OCaml Workshop a brief summary of the tasks undertaken in the span of that fateful year. Cheat Sheets, opam package manager, and many more are the start of a long stream of contributions for the OCaml Distribution and Community at large. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2012 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Fabrice le Fessant</li> </td> <td class="py-4 px-6 align-top"> <a href="https://www.youtube.com/watch?v=DXr8Lr3z7wY&amp;feature=plcp" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Study of OCaml Programs&#x27; memory behavior </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> A two-fold presentation covering both a study of OCaml programs&#x27; memory behaviour and the development of memory profiling tools that were on-going at OCamlPro at the time. These works aimed at decreasing memory footprint, pinpoint and fix memory leaks, and decrease the amount of time spent in memory management at runtime. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2012 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> memory </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Çagdas Bozman</li> <li>Thomas Gazagnaire</li> <li>Fabrice Le Fessant</li> <li>Michel Mauny</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/3YiLW4PfeStDUdf29aPtDH" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> <a href="https://inria.hal.science/hal-01095305v1" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Read Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> opam: An OCaml Package Manager </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Six months after the start of the development of the opam package manager, Frederick Tuong, Fabrice Le Fessant, and Thomas Gazagnaire present for the first time what would in time become the official package manager for the OCaml Distribution. Covering the current state of the repository, and future prospects for the platform, this small piece of media witholds a significant piece of history for OCaml. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2012 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> ocaml-workshop </div> <div class="tag"> opam </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Frederic Tuong</li> <li>Fabrice le Fessant</li> <li>Thomas Gazagnaire</li> </td> <td class="py-4 px-6 align-top"> <a href="https://watch.ocaml.org/w/8UasGCviGqTPzNYgLZyPt1" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> OCaml for the Masses </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Why the next language you learn should be functional. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2011 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> industrial </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Yaron Minsky</li> </td> <td class="py-4 px-6 align-top"> <a href="https://queue.acm.org/detail.cfm?id=2038036" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Meta-Programming Tutorial with CamlP4 </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Meta-programming tutorial with Camlp4 </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2010 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jake Donham</li> </td> <td class="py-4 px-6 align-top"> <a href="https://github.com/jaked/cufp-metaprogramming-tutorial" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Xen and the Art of OCaml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> In this talk, we will firstly describe the architecture of XenServer and the XenAPI and discuss the challenges faced with implementing an Objective Caml based solution. These challenges range from the low-level concerns of interfacing with Xen and the Linux kernel, to the high-level algorithmic problems such as distributed failure planning. In addition, we will discuss the challenges imposed by using OCaml in a commercial environment, such as supporting product upgrades, enhancing supportability, and scaling the development team. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2008 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> industrial </div> <div class="tag"> application </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Anil Madhavapeddy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://cufp.org/archive/2008/slides/MadhavapeddyAnil.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> The Essence of ML Type Inference </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This book chapter gives an in-depth abstract of the Core ML type system, with an emphasis on type inference. The type inference algorithm is described as the composition of a constraint generator, which produces a system of type equations, and a constraint solver, which is presented as a set of rewrite rules. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2005 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>François Pottier</li> <li>Didier Rémy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://cristal.inria.fr/attapl/preversion.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Relaxing the Value Restriction </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper explains why it is sound to generalise certain type variables at a `let` binding, even when the expression that is being `let`-bound is not a value. This relaxed version of Wright&#x27;s classic “value restriction” was introduced in OCaml 3.07. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2004 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jacques Garrigue</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/garrigue-value_restriction-fiwflp04.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/garrigue-value_restriction-fiwflp04.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Typing Deep Pattern-matching in Presence of Polymorphic Variants </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper provides more details about the technical machinery behind polymorphic variants, focusing on the rules for typechecking deep pattern matching constructs. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2004 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> polymorphic variants </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jacques Garrigue</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/garrigue-deep-variants-2004.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/garrigue-deep-variants-2004.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A Proposal for Recursive Modules in Objective Caml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This note describes the experimental recursive modules introduced in OCaml 3.07. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2003 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> modules </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Xavier Leroy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/xleroy-recursive_modules-03.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/xleroy-recursive_modules-03.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Simple Type Inference for Structural Polymorphism </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper explains most of the typechecking machinery behind polymorphic variants. At its heart is an extension of Core ML&#x27;s type discipline with so-called local constraints. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2002 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> polymorphic variants </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jacques Garrigue</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/garrigue-structural_poly-fool02.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/garrigue-structural_poly-fool02.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Labeled and Optional Arguments for Objective Caml </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper offers a dynamic semantics, a static semantics, and a compilation scheme for OCaml&#x27;s labeled and optional function parameters. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2001 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jacques Garrigue</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/garrigue-labels-ppl01.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/garrigue-labels-ppl01.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> <a href="https://caml.inria.fr/pub/papers/garrigue-labels-ppl01.dvi.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download DVI </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Optimizing Pattern Matching </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> All you ever wanted to know about the garbage collector found in Caml Light and OCaml&#x27;s runtime system. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2001 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> pattern-matching </div> <div class="tag"> runtime </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Fabrice Le Fessant</li> <li>Luc Maranget</li> </td> <td class="py-4 px-6 align-top"> <a href="https://dl.acm.org/citation.cfm?id=507641" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> View Online </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A Modular Module System </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This accessible paper describes a simplified implementation of the OCaml module system, emphasizing the fact that the module system is largely independent of the underlying core language. This is a good tutorial to learn both how modules can be used and how they are typechecked. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2000 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> modules </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Xavier Leroy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/xleroy-modular_modules-jfp.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/xleroy-modular_modules-jfp.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> <a href="https://caml.inria.fr/pub/papers/xleroy-modular_modules-jfp.dvi.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download DVI </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Code Reuse Through Polymorphic Variants </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This short paper explains how to design a modular, extensible interpreter using polymorphic variants. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 2000 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> polymorphic variants </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jacques Garrigue</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/garrigue-variant-reuse-2000.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Extending ML with Semi-Explicit Higher-Order Polymorphism </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper proposes a device for re-introducing first-class polymorphic values into ML while preserving its type inference mechanism. This technology underlies OCaml&#x27;s polymorphic methods. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1999 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> objects </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jacques Garrigue</li> <li>Didier Rémy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/garrigue_remy-poly-ic99.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/garrigue_remy-poly-ic99.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> <a href="https://caml.inria.fr/pub/papers/garrigue_remy-poly-ic99.dvi.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download DVI </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Objective ML: An Effective Object-Oriented Extension to ML </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper provides theoretical foundations for OCaml&#x27;s object-oriented layer, including dynamic and static semantics. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1998 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> objects </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Didier Rémy</li> <li>Jérôme Vouillon</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/remy_vouillon-objective_ml-tapos98.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/remy_vouillon-objective_ml-tapos98.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> <a href="https://caml.inria.fr/pub/papers/remy_vouillon-objective_ml-tapos98.dvi.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download DVI </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Programming with Polymorphic Variants </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper briefly explains what polymorphic variants are about and how they are compiled. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1998 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> polymorphic variants </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Jacques Garrigue</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/garrigue-polymorphic_variants-ml98.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/garrigue-polymorphic_variants-ml98.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> The Effectiveness of Type-based Unboxing </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper surveys and compares several data representation strategies, including the one used in the OCaml native-code compiler. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1997 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> compiler </div> <div class="tag"> runtime </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Xavier Leroy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/xleroy-unboxing-tic97.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/xleroy-unboxing-tic97.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Applicative Functors and Fully Transparent Higher-Order Modules </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This work extends the above paper by introducing so-called applicative functors, that is, functors that produce compatible abstract types when applied to provably equal arguments. Applicative functors are also a feature of OCaml. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1995 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> modules </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Xavier Leroy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/xleroy-applicative_functors-popl95.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/xleroy-applicative_functors-popl95.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> <a href="https://caml.inria.fr/pub/papers/xleroy-applicative_functors-popl95.dvi.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download DVI </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Conception, Réalisation et Certification d&#x27;un Glaneur de Cellules Concurrent </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> All you ever wanted to know about the garbage collector found in Caml Light and OCaml&#x27;s runtime system. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1995 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> garbage collection </div> <div class="tag"> runtime </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Damien Doligez</li> <li>Georges Gonthier</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/doligez-these.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/doligez-these.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A Syntactic Approach to Type Soundness </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper describes the semantics and the type system of Core ML and uses a simple syntactic technique to prove that well-typed programs cannot go wrong. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1994 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Andrew K. Wright</li> <li>Matthias Felleisen</li> </td> <td class="py-4 px-6 align-top"> <a href="https://www.cs.rice.edu/CS/PLT/Publications/Scheme/ic94-wf.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Manifest Types, Modules, and Separate Compilation </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper presents a variant of the Standard ML module system that introduces a strict distinction between abstract and manifest types. The latter are types whose definitions explicitly appear as part of a module interface. This proposal is meant to retain most of the expressive power of the Standard ML module system, while providing much better support for separate compilation. This work sets the formal bases for OCaml&#x27;s module system. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1994 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> core </div> <div class="tag"> language </div> <div class="tag"> modules </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Xavier Leroy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/xleroy-manifest_types-popl94.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/xleroy-manifest_types-popl94.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> <a href="https://caml.inria.fr/pub/papers/xleroy-manifest_types-popl94.dvi.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download DVI </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> Portable, Unobtrusive Garbage Collection for Multiprocessor Systems </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This paper describes a concurrent version of the garbage collector found in Caml Light and OCaml&#x27;s runtime system. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1994 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> garbage collection </div> <div class="tag"> runtime </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Damien Doligez</li> <li>Georges Gonthier</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/doligez_gonthier-gc-popl94.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/doligez_gonthier-gc-popl94.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> A Concurrent, Generational Garbage Collector for a Multithreaded Implementation of ML </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> Superseded by &quot;Portable, Unobtrusive Garbage Collection for Multiprocessor Systems&quot; </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1993 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> garbage collection </div> <div class="tag"> runtime </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Damien Doligez</li> <li>Xavier Leroy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/doligez_xleroy-concurrent_gc-popl93.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/doligez_xleroy-concurrent_gc-popl93.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> <tr class="flex flex-col lg:table-row mb-4 lg:mb-0 border-b dark:border-b-dark-separator_30 lg:border-none"> <td class="py-0 lg:py-4 px-6 font-semibold"> <div class="text-xl text-title dark:text-dark-title lg:text-base font-semibold"> The ZINC Experiment, an Economical Implementation of the ML Language </div> <div class="font-normal text-sm mt-2 text-content dark:text-dark-content"> This report contains a abstract of the ZINC compiler, which later evolved into Caml Light, then into OCaml. Large parts of this report are out of date, but it is still valuable as a abstract of the abstract machine used in Caml Light and (with some further simplifications and speed improvements) in OCaml. </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> 1990 </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <div class="flex flex-wrap"> <div class="tag"> compiler </div> <div class="tag"> runtime </div> </div> </td> <td class="pt-4 lg:py-4 px-6 font-medium align-top text-title dark:text-dark-title"> <li>Xavier Leroy</li> </td> <td class="py-4 px-6 align-top"> <a href="https://caml.inria.fr/pub/papers/xleroy-zinc.pdf" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PDF </a> <a href="https://caml.inria.fr/pub/papers/xleroy-zinc.ps.gz" class="text-primary dark:text-dark-white dark:underline hover:text-underline dark:hover:text-dark-primary font-medium block whitespace-nowrap"> Download PostScript </a> </td> </tr> </tbody> </table> </div> </div> </div> </div> </main> <button class="fixed bottom-8 right-10 md:bottom-[5rem] lg:bottom-[8.37rem] lg:right-[6.5rem] border-0 hidden focus:outline-none z-50 rounded-full shadow-custom p-4 bg-primary dark:bg-dark-primary" onclick="scrollToTop()" id="scrollToTop" title="Scroll to top"><svg class="h-6 w-6" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path d="M4.5 10.5L12 3M12 3L19.5 10.5M12 3V21" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg> </button> <footer x-data class="border-t border-separator_30 dark:border-dark-separator_30 bg-dark-sand dark:bg-dark-card" aria-labelledby="footer-heading"> <h2 id="footer-heading" class="sr-only">Footer</h2> <div class="mx-auto max-w-7xl px-6 py-16 lg:px-8"> <div class="flex w-full items-center justify-between mb-8"> <a href="/"><img class="h-8 dark:hidden" src="/_/MDBjN2M4YjIxY2Y1YWExZWE3Njk4M2FiZTg1NWZjNTM/logo-with-name.svg" alt="OCaml"> <img class="h-8 hidden dark:inline" src="/_/MTE3YWE5YzJlZmExNmYyMmI3ZmEwYjliMDEwNDBkMDY/logo-with-name-white.svg" alt="OCaml"> </a> <div class="hidden md:flex"> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border rounded-l rounded-l-full border-r-0" :class='$store.themeSettings.preference === "light" ? "bg-gradient-to-r from-[#FFA932] to-[#C24F1E] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("light")' > <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none" class="mr-2"> <path d="M7 0.5V2.125M11.5962 2.40378L10.4472 3.55283M13.5 7H11.875M11.5962 11.5962L10.4472 10.4472M7 11.875V13.5M3.55283 10.4472L2.40378 11.5962M2.125 7H0.5M3.55283 3.55283L2.40378 2.40378M9.70833 7C9.70833 7.71829 9.42299 8.40717 8.91508 8.91508C8.40717 9.42299 7.71829 9.70833 7 9.70833C6.28171 9.70833 5.59283 9.42299 5.08492 8.91508C4.57701 8.40717 4.29167 7.71829 4.29167 7C4.29167 6.28171 4.57701 5.59283 5.08492 5.08492C5.59283 4.57701 6.28171 4.29167 7 4.29167C7.71829 4.29167 8.40717 4.57701 8.91508 5.08492C9.42299 5.59283 9.70833 6.28171 9.70833 7Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> Light </button> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border border-r-0" :class='$store.themeSettings.preference === "dark" ? "bg-gradient-to-r from-[#0F254F] to-[#0B1228] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("dark")' > <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="mr-2"> <path d="M11.1573 7.90842C10.5134 8.17678 9.8226 8.3145 9.125 8.31358C6.20812 8.31358 3.84375 5.94921 3.84375 3.03233C3.84375 2.31192 3.98783 1.62562 4.24892 1C3.28663 1.40144 2.46465 2.07865 1.88651 2.94635C1.30836 3.81404 0.999911 4.83342 1 5.87608C1 8.79296 3.36437 11.1573 6.28125 11.1573C7.32391 11.1574 8.34329 10.849 9.21099 10.2708C10.0787 9.69268 10.7559 8.8707 11.1573 7.90842Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> Dark </button> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border rounded-r rounded-r-full" :class='$store.themeSettings.preference === "system" ? "bg-gradient-to-r from-[#2B7866] to-[#004039] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("system")' > <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="mr-2"> <path d="M7.19553 2.955C7.26303 2.5485 7.61553 2.25 8.02803 2.25H9.97278C10.3853 2.25 10.7378 2.5485 10.8053 2.955L10.965 3.91575C11.0123 4.19625 11.1998 4.43025 11.4488 4.56825C11.5043 4.59825 11.559 4.6305 11.6138 4.6635C11.8575 4.8105 12.1538 4.85625 12.42 4.7565L13.3328 4.4145C13.5198 4.34416 13.7258 4.34248 13.9139 4.40978C14.1021 4.47708 14.2603 4.60899 14.3603 4.782L15.3323 6.46725C15.4321 6.64028 15.4672 6.8431 15.4315 7.03962C15.3958 7.23615 15.2916 7.41363 15.1373 7.5405L14.385 8.16075C14.1653 8.3415 14.0565 8.6205 14.0625 8.90475C14.0636 8.9685 14.0636 9.03225 14.0625 9.096C14.0565 9.3795 14.1653 9.6585 14.385 9.83925L15.138 10.4595C15.456 10.722 15.5385 11.1758 15.333 11.532L14.3595 13.2172C14.2597 13.3902 14.1017 13.5222 13.9137 13.5896C13.7257 13.657 13.5198 13.6556 13.3328 13.5855L12.42 13.2435C12.1538 13.1438 11.8575 13.1895 11.613 13.3365C11.5587 13.3696 11.5037 13.4016 11.448 13.4325C11.1998 13.5697 11.0123 13.8037 10.965 14.0842L10.8053 15.045C10.7378 15.4523 10.3853 15.75 9.97278 15.75H8.02728C7.61478 15.75 7.26303 15.4515 7.19478 15.045L7.03503 14.0842C6.98853 13.8037 6.80103 13.5698 6.55203 13.4318C6.49642 13.4011 6.44141 13.3693 6.38703 13.3365C6.14328 13.1895 5.84703 13.1438 5.58003 13.2435L4.66728 13.5855C4.48033 13.6556 4.27456 13.6572 4.08656 13.5899C3.89856 13.5226 3.74051 13.3908 3.64053 13.218L2.66778 11.5328C2.56799 11.3597 2.53282 11.1569 2.56852 10.9604C2.60423 10.7639 2.7085 10.5864 2.86278 10.4595L3.61578 9.83925C3.83478 9.65925 3.94353 9.3795 3.93828 9.096C3.93711 9.03226 3.93711 8.96849 3.93828 8.90475C3.94353 8.61975 3.83478 8.3415 3.61578 8.16075L2.86278 7.5405C2.70869 7.41367 2.60454 7.23633 2.56884 7.03997C2.53314 6.84361 2.56819 6.64095 2.66778 6.468L3.64053 4.78275C3.74042 4.6096 3.89854 4.47754 4.08672 4.4101C4.27489 4.34266 4.4809 4.34422 4.66803 4.4145L5.58003 4.7565C5.84703 4.85625 6.14328 4.8105 6.38703 4.6635C6.44103 4.6305 6.49653 4.599 6.55203 4.5675C6.80103 4.43025 6.98853 4.19625 7.03503 3.91575L7.19553 2.955Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> <path d="M11.25 9C11.25 9.59674 11.0129 10.169 10.591 10.591C10.169 11.0129 9.59674 11.25 9 11.25C8.40326 11.25 7.83097 11.0129 7.40901 10.591C6.98705 10.169 6.75 9.59674 6.75 9C6.75 8.40326 6.98705 7.83097 7.40901 7.40901C7.83097 6.98705 8.40326 6.75 9 6.75C9.59674 6.75 10.169 6.98705 10.591 7.40901C11.0129 7.83097 11.25 8.40326 11.25 9Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> System </button> </div> </div> <div class="xl:grid xl:grid-cols-3 xl:gap-8"> <div class="space-y-8"> <p class="text-base leading-6 text-title dark:text-dark-content">Innovation. Community. Security.</p> <div class="flex space-x-6"> <a href="https://github.com/ocaml" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">GitHub</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" /> </svg> </a> <a href="https://discord.gg/cCYQbqN" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">Discord</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M18.9419 5.29661C17.6473 4.69088 16.263 4.25066 14.8157 4C14.638 4.32134 14.4304 4.75355 14.2872 5.09738C12.7487 4.86601 11.2245 4.86601 9.7143 5.09738C9.57116 4.75355 9.3588 4.32134 9.17947 4C7.73067 4.25066 6.3448 4.6925 5.05016 5.29982C2.43887 9.24582 1.73099 13.0938 2.08493 16.8872C3.81688 18.1805 5.49534 18.9662 7.14548 19.4804C7.55291 18.9196 7.91628 18.3235 8.22931 17.6953C7.63313 17.4688 7.06211 17.1892 6.52256 16.8647C6.6657 16.7586 6.80571 16.6478 6.94098 16.5337C10.2318 18.0729 13.8074 18.0729 17.0589 16.5337C17.1958 16.6478 17.3358 16.7586 17.4774 16.8647C16.9362 17.1908 16.3637 17.4704 15.7675 17.697C16.0805 18.3235 16.4423 18.9212 16.8513 19.4819C18.503 18.9678 20.183 18.1822 21.915 16.8872C22.3303 12.4897 21.2056 8.67705 18.9419 5.29661ZM8.67765 14.5543C7.68977 14.5543 6.87963 13.632 6.87963 12.509C6.87963 11.3859 7.67247 10.4621 8.67765 10.4621C9.68285 10.4621 10.493 11.3843 10.4757 12.509C10.4772 13.632 9.68285 14.5543 8.67765 14.5543ZM15.3223 14.5543C14.3344 14.5543 13.5243 13.632 13.5243 12.509C13.5243 11.3859 14.3171 10.4621 15.3223 10.4621C16.3275 10.4621 17.1376 11.3843 17.1203 12.509C17.1203 13.632 16.3275 14.5543 15.3223 14.5543Z" clip-rule="evenodd" /> </svg> </a> <a href="https://twitter.com/ocaml_org" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">Twitter</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" /> </svg> </a> <a href="https://watch.ocaml.org/" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">Peertube</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M5 2V12L12.4998 7.00047" clip-rule="evenodd" /> <path fill-rule="evenodd" d="M5 12V22L12.4998 17.0005" clip-rule="evenodd" /> <path fill-rule="evenodd" d="M12.4998 6.99951V16.9995L19.9995 12" clip-rule="evenodd" /> </svg> </a> <a href="/planet.xml" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">RSS</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M15.2692 22H11.3846C11.3846 16.8462 7.11538 12.6154 2 12.6154V8.73077C9.26923 8.73077 15.2692 14.7308 15.2692 22ZM18 22C18 13.2308 10.7692 6 2 6V2C12.9615 2 22 11.0385 22 22H18Z" clip-rule="evenodd" /> <path fill-rule="evenodd" d="M4.73077 22C6.23893 22 7.46154 20.7774 7.46154 19.2692C7.46154 17.7611 6.23893 16.5385 4.73077 16.5385C3.22261 16.5385 2 17.7611 2 19.2692C2 20.7774 3.22261 22 4.73077 22Z" clip-rule="evenodd" /> </svg> </a> </div> <div class="flex w-full md:hidden"> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border rounded-l rounded-l-full border-r-0" :class='$store.themeSettings.preference === "light" ? "bg-gradient-to-r from-[#FFA932] to-[#C24F1E] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("light")' > <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none" class="mr-2"> <path d="M7 0.5V2.125M11.5962 2.40378L10.4472 3.55283M13.5 7H11.875M11.5962 11.5962L10.4472 10.4472M7 11.875V13.5M3.55283 10.4472L2.40378 11.5962M2.125 7H0.5M3.55283 3.55283L2.40378 2.40378M9.70833 7C9.70833 7.71829 9.42299 8.40717 8.91508 8.91508C8.40717 9.42299 7.71829 9.70833 7 9.70833C6.28171 9.70833 5.59283 9.42299 5.08492 8.91508C4.57701 8.40717 4.29167 7.71829 4.29167 7C4.29167 6.28171 4.57701 5.59283 5.08492 5.08492C5.59283 4.57701 6.28171 4.29167 7 4.29167C7.71829 4.29167 8.40717 4.57701 8.91508 5.08492C9.42299 5.59283 9.70833 6.28171 9.70833 7Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> Light </button> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border border-r-0" :class='$store.themeSettings.preference === "dark" ? "bg-gradient-to-r from-[#0F254F] to-[#0B1228] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("dark")' > <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="mr-2"> <path d="M11.1573 7.90842C10.5134 8.17678 9.8226 8.3145 9.125 8.31358C6.20812 8.31358 3.84375 5.94921 3.84375 3.03233C3.84375 2.31192 3.98783 1.62562 4.24892 1C3.28663 1.40144 2.46465 2.07865 1.88651 2.94635C1.30836 3.81404 0.999911 4.83342 1 5.87608C1 8.79296 3.36437 11.1573 6.28125 11.1573C7.32391 11.1574 8.34329 10.849 9.21099 10.2708C10.0787 9.69268 10.7559 8.8707 11.1573 7.90842Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> Dark </button> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border rounded-r rounded-r-full" :class='$store.themeSettings.preference === "system" ? "bg-gradient-to-r from-[#2B7866] to-[#004039] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("system")' > <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="mr-2"> <path d="M7.19553 2.955C7.26303 2.5485 7.61553 2.25 8.02803 2.25H9.97278C10.3853 2.25 10.7378 2.5485 10.8053 2.955L10.965 3.91575C11.0123 4.19625 11.1998 4.43025 11.4488 4.56825C11.5043 4.59825 11.559 4.6305 11.6138 4.6635C11.8575 4.8105 12.1538 4.85625 12.42 4.7565L13.3328 4.4145C13.5198 4.34416 13.7258 4.34248 13.9139 4.40978C14.1021 4.47708 14.2603 4.60899 14.3603 4.782L15.3323 6.46725C15.4321 6.64028 15.4672 6.8431 15.4315 7.03962C15.3958 7.23615 15.2916 7.41363 15.1373 7.5405L14.385 8.16075C14.1653 8.3415 14.0565 8.6205 14.0625 8.90475C14.0636 8.9685 14.0636 9.03225 14.0625 9.096C14.0565 9.3795 14.1653 9.6585 14.385 9.83925L15.138 10.4595C15.456 10.722 15.5385 11.1758 15.333 11.532L14.3595 13.2172C14.2597 13.3902 14.1017 13.5222 13.9137 13.5896C13.7257 13.657 13.5198 13.6556 13.3328 13.5855L12.42 13.2435C12.1538 13.1438 11.8575 13.1895 11.613 13.3365C11.5587 13.3696 11.5037 13.4016 11.448 13.4325C11.1998 13.5697 11.0123 13.8037 10.965 14.0842L10.8053 15.045C10.7378 15.4523 10.3853 15.75 9.97278 15.75H8.02728C7.61478 15.75 7.26303 15.4515 7.19478 15.045L7.03503 14.0842C6.98853 13.8037 6.80103 13.5698 6.55203 13.4318C6.49642 13.4011 6.44141 13.3693 6.38703 13.3365C6.14328 13.1895 5.84703 13.1438 5.58003 13.2435L4.66728 13.5855C4.48033 13.6556 4.27456 13.6572 4.08656 13.5899C3.89856 13.5226 3.74051 13.3908 3.64053 13.218L2.66778 11.5328C2.56799 11.3597 2.53282 11.1569 2.56852 10.9604C2.60423 10.7639 2.7085 10.5864 2.86278 10.4595L3.61578 9.83925C3.83478 9.65925 3.94353 9.3795 3.93828 9.096C3.93711 9.03226 3.93711 8.96849 3.93828 8.90475C3.94353 8.61975 3.83478 8.3415 3.61578 8.16075L2.86278 7.5405C2.70869 7.41367 2.60454 7.23633 2.56884 7.03997C2.53314 6.84361 2.56819 6.64095 2.66778 6.468L3.64053 4.78275C3.74042 4.6096 3.89854 4.47754 4.08672 4.4101C4.27489 4.34266 4.4809 4.34422 4.66803 4.4145L5.58003 4.7565C5.84703 4.85625 6.14328 4.8105 6.38703 4.6635C6.44103 4.6305 6.49653 4.599 6.55203 4.5675C6.80103 4.43025 6.98853 4.19625 7.03503 3.91575L7.19553 2.955Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> <path d="M11.25 9C11.25 9.59674 11.0129 10.169 10.591 10.591C10.169 11.0129 9.59674 11.25 9 11.25C8.40326 11.25 7.83097 11.0129 7.40901 10.591C6.98705 10.169 6.75 9.59674 6.75 9C6.75 8.40326 6.98705 7.83097 7.40901 7.40901C7.83097 6.98705 8.40326 6.75 9 6.75C9.59674 6.75 10.169 6.98705 10.591 7.40901C11.0129 7.83097 11.25 8.40326 11.25 9Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> System </button> </div> </div> <div class="mt-8 grid grid-cols-2 gap-8 xl:col-span-2 xl:mt-0"> <div class="md:grid md:grid-cols-2 md:gap-8"> <div> <h3 class="text-base font-semibold leading-6 text-title dark:text-dark-content">About OCaml</h3> <ul class="mt-6 space-y-4"> <li> <a href="/changelog" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Changelog</a> </li> <li> <a href="/releases" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Releases</a> </li> <li> <a href="/industrial-users" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Industrial Users</a> </li> <li> <a href="/academic-users" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Academic Users</a> </li> <li> <a href="/about" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Why OCaml</a> </li> </ul> </div> <div class="mt-10 md:mt-0"> <h3 class="text-base font-semibold leading-6 text-title dark:text-dark-content">Resources</h3> <ul class="mt-6 space-y-4"> <li> <a href="/install" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Install OCaml</a> </li> <li> <a href="/docs/get-started" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Get Started</a> </li> <li> <a href="/docs/tools" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Platform Tools</a> </li> <li> <a href="/manual" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Language Manual</a> </li> <li> <a href="/api" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Standard Library API</a> </li> <li> <a href="/books" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Books</a> </li> <li> <a href="/exercises" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Exercises</a> </li> <li> <a href="/papers" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Papers</a> </li> <li> <a href="/play" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">OCaml Playground</a> </li> <li> <a href="/logo" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Logo</a> </li> </ul> </div> </div> <div class="md:grid md:grid-cols-2 md:gap-8"> <div> <h3 class="text-base font-semibold leading-6 text-title dark:text-dark-content">Ecosystem</h3> <ul class="mt-6 space-y-4"> <li> <a href="/packages" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Packages</a> </li> <li> <a href="/community" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Community</a> </li> <li> <a href="/events" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Events</a> </li> <li> <a href="/ocaml-planet" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">OCaml Planet</a> </li> <li> <a href="/jobs" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Jobs</a> </li> </ul> </div> <div class="mt-20 md:mt-0"> <h3 class="text-base font-semibold leading-6 text-title dark:text-dark-content">Policies</h3> <ul class="mt-6 space-y-4"> <li> <a href="/policies/carbon-footprint" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Carbon Footprint</a> </li> <li> <a href="/governance" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Governance</a> </li> <li> <a href="/policies/privacy-policy" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Privacy</a> </li> <li> <a href="/policies/code-of-conduct" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Code of Conduct</a> </li> </ul> </div> </div> </div> </div> </div> <script> document.addEventListener('alpine:init', () => { Alpine.store('themeSettings', { init() { this.storageAccess = localStorage.getItem('storageAccess') this.preference = localStorage.getItem('theme') || "system" this.isSystemDefaultDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches }, selected: '', alertOpen: false, storageAccess: false, preference: undefined, isSystemDefaultDark: false, setPreference(preference) { if (!this.storageAccess) { if (!window.confirm("We will remember your choice in your browser's LocalStorage. Allow this?")) { return; } localStorage.setItem('storageAccess', true) storageAccess = true; } this.selected = preference; this.preference = preference localStorage.setItem('theme', preference) if (preference === 'dark') { document.body.classList.add("dark"); } if (preference === 'light') { document.body.classList.remove("dark"); } if (preference === 'system') { if (this.isSystemDefaultDark) { document.body.classList.add("dark"); } else { document.body.classList.remove("dark"); } localStorage.removeItem('theme') return } }, }) }) </script> </footer> <script> function scrollToTop() { window.scrollTo(0, 0); } window.onscroll = function() { showScrollButton(); }; function showScrollButton() { if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { document.getElementById("scrollToTop").style.display = "block"; } else { document.getElementById("scrollToTop").style.display = "none"; } } </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10