CINXE.COM

OCaml 5.3.0 Release Notes

<!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="OCaml 5.3.0 was released on 2025-01-08. Learn more about this in the release notes."> <meta name="twitter:title" content="OCaml 5.3.0 Release Notes"> <meta name="twitter:description" content="OCaml 5.3.0 was released on 2025-01-08. Learn more about this in the release notes."> <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 5.3.0 Release Notes"> <meta property="og:description" content="OCaml 5.3.0 was released on 2025-01-08. Learn more about this in the release notes."> <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/releases/5.3.0"> <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 5.3.0 Release Notes</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-title dark:text-dark-title">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-title dark:text-dark-title">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="flex md:flex-row lg:px-6 items-center md:space-x-36 flex-col-reverse"> <div class="text-left md:mt-10 lg:mt-0 mt-0"> <a href="/releases" class="flex justify-start space-x-3 items-center text-primary dark:text-dark-primary hover:underline font-semibold mb-4 h-12"> <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 inline-block" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18" /> </svg> <div>All Releases</div> </a> <h2 class="font-bold text-title dark:text-dark-title pb-6">OCaml 5.3.0</h2> <div class="prose dark:prose-invert prose-orange lg:prose-lg mx-auto max-w-5xl"> <p>This page describes OCaml version <strong>5.3.0</strong>, released on 2025-01-08. Go <a href="/releases">here</a> for a list of all releases.</p> <p>This release is available as an <a href="/p/ocaml/5.3.0">opam</a> package.</p> </div> </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="prose dark:prose-invert prose-orange px-6 lg:prose-lg max-w-5xl"> <h2 id="whats-new"><a class="anchor" aria-hidden="true" href="#whats-new"></a>What's New</h2> <p>Some of the highlights in OCaml 5.3.0 are:</p> <ul> <li>Syntax for deep effect handlers</li> <li>Restored MSVC port</li> <li>Re-introduced statistical memory profiling</li> <li>More space-efficient implementation of Dynarray</li> <li>utf-8 encoded Unicode source files and modest support of Unicode identifiers</li> <li>Improved metadata on the pairs of declarations and definitions for merlin.</li> </ul> <p>And a lot of incremental changes:</p> <ul> <li>Around 20 new functions in the standard library</li> <li>Many fixes and improvements in the runtime</li> <li>Improved error messages for first-class modules, functors, labeled arguments, type clashes.</li> <li>Numerous bug fixes</li> </ul> <p>For a comprehensive list of changes and details on all new features, bug fixes, optimisations, etc., please consult the <a href="#Changes">changelog</a>.</p> <hr> <h2 id="installation-instructions"><a class="anchor" aria-hidden="true" href="#installation-instructions"></a>Installation Instructions</h2> <p>The base compiler can be installed as an opam switch with the following commands:</p> <pre><code><span class='bash-source'>opam update </span><span class='bash-source'>opam switch create 5.3.0 </span></code></pre> <p>The source code for OCaml 5.3.0 is also directly available on:</p> <ul> <li><a href="https://github.com/ocaml/ocaml/archive/5.3.0.tar.gz">GitHub</a></li> <li><a href="https://caml.inria.fr/pub/distrib/ocaml-5.3/ocaml-5.3.0.tar.gz">OCaml archives at Inria</a></li> </ul> <h3 id="configuration-options"><a class="anchor" aria-hidden="true" href="#configuration-options"></a>Configuration Options</h3> <p>The configuration of the installed <a href="https://opam.ocaml.org/">opam</a> switch can be tuned with the following options:</p> <ul> <li><code>ocaml-option-afl</code>: Set OCaml to be compiled with <code>afl-fuzz</code> instrumentation</li> <li><code>ocaml-option-bytecode-only</code>: Compile OCaml without the native-code compiler</li> <li><code>ocaml-option-flambda</code>: Set OCaml to be compiled with <code>flambda</code> activated</li> <li><code>ocaml-option-musl</code>: Set OCaml to be compiled with <code>musl-gcc</code></li> <li><code>ocaml-option-no-flat-float-array</code>: Set OCaml to be compiled with <code>--disable-flat-float-array</code></li> <li><code>ocaml-option-static</code>: Set OCaml to be compiled with <code>musl-gcc -static</code></li> <li><code>ocaml-option-tsan</code> : Set OCaml to be compiled with thread sanitiser support</li> <li><code>ocaml-option-address-sanitizer</code>: Set OCaml to be compiled with address sanitiser</li> <li><code>ocaml-option-leak-sanitizer</code>: Set OCaml to be compiled with leak sanitiser</li> <li><code>ocaml-option-fp</code>: Set OCaml to be compiled with frame pointers</li> </ul> <p>For instance, one can install a switch with both <code>flambda</code> and the <code>--disable-flat-float-array</code> option with</p> <pre><code>opam switch create 5.3.0+flambda+nffa ocaml-variants.5.3.0+options ocaml-option-flambda ocaml-option-no-flat-float-array </code></pre> <h2 id="source-distribution"><a class="anchor" aria-hidden="true" href="#source-distribution"></a>Source Distribution</h2> <ul> <li><a href="https://github.com/ocaml/ocaml/archive/5.3.0.tar.gz">Source tarball</a> (<code>.tar.gz</code>) for compilation under Unix (including Linux and macOS X) and Microsoft Windows (including Cygwin)</li> <li>Also available in <a href="https://github.com/ocaml/ocaml/archive/5.3.0.zip"><code>.zip</code></a> format</li> <li><a href="https://opam.ocaml.org/">Opam</a> is a source-based distribution of OCaml and many companion libraries and tools. Compilation and installation are automated by powerful package managers.</li> <li>The official development repo is hosted on <a href="https://github.com/ocaml/ocaml">GitHub</a>.</li> </ul> <p>The <a href="https://ocaml.org/releases/5.3/notes/INSTALL.adoc">INSTALL</a> file of the distribution provides detailed compilation and installation instructions. See also the <a href="https://ocaml.org/releases/5.3/notes/README.win32.adoc">Windows release notes</a> for instructions on how to build under Windows.</p> <h2 id="alternative-compilers"><a class="anchor" aria-hidden="true" href="#alternative-compilers"></a>Alternative Compilers</h2> <p>Additionally, the following projects allow you to compile OCaml code to targets traditionally associated with other languages:</p> <ul> <li><a href="http://ocsigen.org/js_of_ocaml/">Js_of_ocaml</a> is a stable OCaml to JavaScript compiler.</li> </ul> <h2 id="user-manual"><a class="anchor" aria-hidden="true" href="#user-manual"></a>User Manual</h2> <p>The user manual for OCaml can be:</p> <ul> <li><a href="https://ocaml.org/releases/5.3/manual/index.html">Browsed online</a></li> <li>Downloaded as a single <a href="https://ocaml.org/releases/5.3/ocaml-5.3-refman.pdf">PDF</a> or <a href="https://ocaml.org/releases/5.3/ocaml-5.3-refman.txt">plain text</a> document</li> <li>Downloaded as a single <a href="https://ocaml.org/releases/5.3/ocaml-5.3-refman-html.tar.gz">TAR</a> or <a href="https://ocaml.org/releases/5.3/ocaml-5.3-refman-html.zip">ZIP</a> archive of HTML files</li> <li>Downloaded as a single <a href="https://ocaml.org/releases/5.3/ocaml-5.3-refman.info.tar.gz">tarball</a> of Emacs info files</li> </ul> <h2 id="changes"><a class="anchor" aria-hidden="true" href="#changes"></a>Changes</h2> <p>(Changes that can break existing programs are marked with a &quot;*&quot;)</p> <h3 id="restored-backend"><a class="anchor" aria-hidden="true" href="#restored-backend"></a>Restored backend:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12954">#12954</a>: Restore the MSVC port (David Allsopp, Antonin D茅cimo, Samuel Hym, and Miod Vallat, review by Nicol谩s Ojeda B盲r)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13093">#13093</a>: Allow building the MSVC port with clang-cl. (Antonin D茅cimo, review by Nicol谩s Ojeda B盲r, Samuel Hym, David Allsopp and S茅bastien Hinderer)</p> </li> </ul> <h3 id="language-features"><a class="anchor" aria-hidden="true" href="#language-features"></a>Language features:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12309">#12309</a>, <a href="https://github.com/ocaml/ocaml/issues/13158">#13158</a>: Add syntax support for deep effect handlers (Leo White, Tom Kelly, Anil Madhavapeddy, KC Sivaramakrishnan, Xavier Leroy and Florian Angeletti, review by the same, Hugo Heuzard, and Ulysse G茅rard)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/11736">#11736</a>, <a href="https://github.com/ocaml/ocaml/issues/12664">#12664</a>, <a href="https://github.com/ocaml/ocaml/issues/13628">#13628</a>: Support utf-8 encoded source files and latin-9 compatible identifiers. (Xavier Leroy and Florian Angeletti, review by Daniel B眉nzli and Jules Aguillon)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12828">#12828</a>, <a href="https://github.com/ocaml/ocaml/issues/13283">#13283</a>: Add short syntax for dependent functor types <code>(X:A) -&gt; ...</code> (Jeremy Yallop, review by Nicol谩s Ojeda B盲r and Gabriel Scherer)</p> </li> </ul> <h3 id="type-system"><a class="anchor" aria-hidden="true" href="#type-system"></a>Type system</h3> <ul> <li><a href="https://github.com/ocaml/ocaml/issues/11891">#11891</a>, <a href="https://github.com/ocaml/ocaml/issues/12507">#12507</a>: Allow to name new locally abstract types in constructor type annotations. (Jacques Garrigue, report and review by Gabriel Scherer and Florian Angeletti)</li> </ul> <h3 id="runtime-system"><a class="anchor" aria-hidden="true" href="#runtime-system"></a>Runtime system:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/11911">#11911</a>, <a href="https://github.com/ocaml/ocaml/issues/12923">#12923</a>: Multicore statistical memory profiling. This restores a notable OCaml 4 feature that was missing in OCaml 5. (Nick Barnes, review by Stephen Dolan, Jacques-Henri Jourdan and Guillaume Munch-Maccagnoni).</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13419">#13419</a>: Fix memory bugs in runtime events system. (B. Szilvasy and Nick Barnes, review by Miod Vallat, Nick Barnes, Tim McGilchrist, and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13364">#13364</a>: Emit major slice counters in the runtime events. (KC Sivaramakrishnan and Sadiq Jaffer, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13382">#13382</a>: Add more documentation for Runtime_events types (Sadiq Jaffer, review by Tim McGilchrist, Miod Vallat and KC Sivaramakrishnan)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13370">#13370</a>: Fix a low-probability crash when calling Gc.counters. (Demi Marie Obenour, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13272">#13272</a>: Allow maximum number of domains to be specified as a OCAMLRUNPARAM parameter. (KC Sivaramakrishnan, review by Guillaume Munch-Maccagnoni, Miod Vallat, Gabriel Scherer, David Allsopp, request by Zachary Yedidia).</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12579">#12579</a>: OS-based Synchronisation for Stop-the-World Sections (B. Szilvasy, review by Miod Vallat, Nick Barnes, Olivier Nicole, Gabriel Scherer and Damien Doligez)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12789">#12789</a>: Restore caml_unregister_frametable from OCaml 4 (Fr茅d茅ric Recoules, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13003">#13003</a>: new, more consistent names for array-creation C functions (Gabriel Scherer, review by Olivier Nicole)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13013">#13013</a>: introduce a <code>caml_result</code> type to supersede the use of 'encoded exception values' in the FFI. (Gabriel Scherer, review by Damien Doligez, Guillaume Munch-Maccagnoni and Xavier Leroy, suggested by Guillaume Munch-Maccagnoni)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12407">#12407</a>, <a href="https://github.com/ocaml/ocaml/issues/13226">#13226</a>: Resource-handling improvements: add exception-returning variants for all exception-raising functions in <code>caml/fail.h</code>, for the purpose of cleaning-up state and resources before raising. (Guillaume Munch-Maccagnoni, review by Damien Doligez, Xavier Leroy and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13086">#13086</a>: Avoid spurious major GC slices. (Damien Doligez, report by Stephen Dolan, review by Gabriel Scherer and Stephen Dolan)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/11779">#11779</a>, <a href="https://github.com/ocaml/ocaml/issues/13117">#13117</a>: Improve logic for fiber stack alignment. (Miod Vallat, report by Damien Doligez, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12839">#12839</a>: Remove ATOMIC_UINTNAT_INIT from camlatomic.h (as part of a larger cleanup of camlatomic.h) (David Allsopp, review by Antonin D茅cimo, S茅bastien Hinderer, Samuel Hym, Guillaume Munch-Maccagnoni and Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13163">#13163</a>: Enable frame pointers on macOS x86_64 (Tim McGilchrist, review by S茅bastien Hinderer and Fabrice Buoro)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12951">#12951</a>: Constify constructors and flags tables in C code (take 2). Now these tables will go in the readonly segment, where they belong. (Antonin D茅cimo, review by David Allsopp)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/10696">#10696</a>: Introduce __has_attribute and __has_c_attributes in &lt;caml/misc.h&gt; to test the support of specific attributes in C code. Introduce fallthrough as a wrapper around the fallthrough attribute. (Antonin D茅cimo, review by Nicol谩s Ojeda B盲r, Xavier Leroy, and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13083">#13083</a>: Use macros from limits.h to avoid signed-integer wrap-around. Introduce CAML_{U,}INTNAT_{MIN,MAX} macros to expose {u,}intnat limits. (Antonin D茅cimo, review by Nick Barnes, Xavier Leroy, Gabriel Scherer, and Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13239">#13239</a>: Check whether the compiler supports the labels as values extension to enable threaded code interpretation. (Antonin D茅cimo, review by Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13238">#13238</a>: Enable software prefetching on x86 and x86_64 when building with MSVC or clang-cl. (Antonin D茅cimo, review by Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13241">#13241</a>, <a href="https://github.com/ocaml/ocaml/issues/13261">#13261</a>, <a href="https://github.com/ocaml/ocaml/issues/13271">#13271</a>: Add CFI_SIGNAL_FRAME to ARM64 and RiscV runtimes, for the purpose of displaying backtraces correctly in GDB. (Tim McGilchrist, review by Miod Vallat, Gabriel Scherer and KC Sivaramakrishnan)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13139">#13139</a>: Simplify CAMLalign to always use C23/C++11 alignas or C11 _Alignas. Ensures that stat data is always aligned to the best boundary. (Antonin D茅cimo, review by Miod Vallat and Xavier Leroy)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13280">#13280</a>: Check for support of compiler attributes. Allows using compiler attributes with clang-cl. (Antonin D茅cimo, review by Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13243">#13243</a>: Enable C compiler warnings internally when building with clang-cl or MSVC. Provide fixes too. (Antonin D茅cimo, review by Miod Vallat and Xavier Leroy)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13242">#13242</a>: Define and use unreachable and trap annotation, and clean-up some runtime assertions. (Antonin D茅cimo, review by Miod Vallat, Gabriel Scherer, and David Allsopp)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13402">#13402</a>, <a href="https://github.com/ocaml/ocaml/issues/13512">#13512</a>, <a href="https://github.com/ocaml/ocaml/issues/13549">#13549</a>, <a href="https://github.com/ocaml/ocaml/issues/13553">#13553</a>: Revise bytecode implementation of callbacks so that it no longer produces dangling registered bytecode fragments. (Xavier Leroy, report by Jan Midtgaard, analysis by Stephen Dolan, review by Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13407">#13407</a>: Add Runtime_events.EV_EMPTY_MINOR (Thomas Leonard)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13522">#13522</a>: Confirm runtime events ring is still active after callback. (KC Sivaramakrishnan, review by Sadiq Jaffer and Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13529">#13529</a>: Do not write to event ring after going out of stw participant set. (KC Sivaramakrishnan, review by Sadiq Jaffer)</p> </li> </ul> <h3 id="code-generation-and-optimizations"><a class="anchor" aria-hidden="true" href="#code-generation-and-optimizations"></a>Code generation and optimizations:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13014">#13014</a>: Enable compile-time option -function-sections on all previously unsupported native backends (POWER, riscv64 and s390x) (Miod Vallat, review by Nicol谩s Ojeda B盲r)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/7241">#7241</a>, <a href="https://github.com/ocaml/ocaml/issues/12555">#12555</a>, <a href="https://github.com/ocaml/ocaml/issues/13076">#13076</a>, <a href="https://github.com/ocaml/ocaml/issues/13138">#13138</a>, <a href="https://github.com/ocaml/ocaml/issues/13338">#13338</a>, <a href="https://github.com/ocaml/ocaml/issues/13152">#13152</a>, <a href="https://github.com/ocaml/ocaml/issues/13153">#13153</a>, <a href="https://github.com/ocaml/ocaml/issues/13154">#13154</a>: fix a soundness bug in the pattern-matching compiler when side-effects mutate the scrutinee during matching. (Gabriel Scherer, review by Nick Roberts)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13341">#13341</a>: a warning when the pattern-matching compiler pessimizes code because side-effects may mutate the scrutinee during matching. (This warning is disabled by default, as this rarely happens and its performance impact is typically not noticeable.) (Gabriel Scherer, review by Nick Roberts, Florian Angeletti and David Allsopp)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13179">#13179</a>: Fix evaluation of toplevel lets in classes containing local opens (Vincent Laviron, review by Hugo Heuzard, Nathana毛lle Courant and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13543">#13543</a>: Remove some String-Bytes conversion from the stdlib to behave better with js_of_ocaml (Hugo Heuzard, review by Gabriel Scherer)</p> </li> </ul> <h3 id="standard-library"><a class="anchor" aria-hidden="true" href="#standard-library"></a>Standard library:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12885">#12885</a>: move Dynarray to an unboxed representation (Gabriel Scherer, suggestions by Vincent Laviron, review by Olivier Nicole and Simon Cruanes, Yann Leray, Alain Frisch)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12884">#12884</a>: Add <code>Queue.drop</code> (L茅o Andr猫s, review by Nicol谩s Ojeda B盲r and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13168">#13168</a>: In Array.shuffle, clarify the code that validates the result of the user-supplied function <code>rand</code>, and improve the error message that is produced when this result is invalid. (Fran莽ois Pottier, review by Florian Angeletti, Daniel B眉nzli and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12133">#12133</a>: Expose support for printing substrings in Format (Florian Angeletti, review by Daniel B眉nzli, Gabriel Scherer and Nicol谩s Ojeda B盲r)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12869">#12869</a>: Add List.take, List.drop, List.take_while and List.drop_while (Kate Deplaix and Oscar Butler-Aldridge, review by Nicol谩s Ojeda B盲r, Craig Ferguson and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13047">#13047</a>: Add Sys.poll_actions to (only) run pending runtime actions. (Nick Barnes, review by Gabriel Scherer, Guillaume Munch-Maccagnoni, and Vincent Laviron)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13144">#13144</a>: Dynarray.{equal, compare} (Gabriel Scherer, review by Jeremy Yallop, Daniel B眉nzli and Olivier Nicole, request by Olivier Nicole)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13171">#13171</a>: expose <code>Domain.self_index : unit -&gt; int</code> (a somewhat-dense indexing of currently-running domains) for advanced use-cases of domain-indexed concurrent data structures. (Gabriel Scherer, review by KC Sivaramakrishnan, Miod Vallat and Nicol谩s Ojeda B盲r, report by Vesa Karvonen)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13197">#13197</a>: Dynarray.blit, which allows to extend the destination dynarray (0 &lt;= dst_pos &lt;= dst_length). (Gabriel Scherer, report by Hazem Elmasry, review by Olivier Nicole, Hazem Elmasry and Nicol谩s Ojeda B盲r)</p> </li> </ul> <ul> <li>(<em>breaking change</em>) <a href="https://github.com/ocaml/ocaml/issues/13240">#13240</a>: Add Uchar.seeded_hash, Change Uchar.hash implementation. Previously, Uchar.hash was aliased to Uchar.to_int. If you need that behavior, change your module instantiation from eg <code>module HT = Hashtbl.Make(Uchar)</code> to <pre><code> module HT = Hashtbl.Make(struct ... let hash = Uchar.to_int end) </code></pre> If the current implementation is desired, and you have a hashtable module <code>HT</code> (produced with the <code>Make</code> functor) in persistent storage, use <code>HT.rebuild</code> to ensure it doesn't break when reading from or writing to buckets. (Hazem ElMasry, review by Gabriel Scherer and Nicol谩s Ojeda B盲r)</li> </ul> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13318">#13318</a>: Fix regression in GC alarms, and fix them for flambda. (Guillaume Munch-Maccagnoni, report by Benjamin Monate, review by Vincent Laviron and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13296">#13296</a>: Add mem, memq, find_opt, find_index, find_map and find_mapi to Dynarray. (Jake H, review by Gabriel Scherer and Florian Angeletti)</p> </li> </ul> <h3 id="other-libraries"><a class="anchor" aria-hidden="true" href="#other-libraries"></a>Other libraries:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/11996">#11996</a>: release the dependency of dynlink on compilerlibs. (S茅bastien Hinderer and Stephen Dolan, review by Damien Doligez and Hugo Heuzard)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13326">#13326</a>: Implement Unix.O_APPEND on windows. (Romain Beauxis, review by Miod Vallat, Gabriel Scherer and Antonin D茅cimo)</p> </li> </ul> <h3 id="tools"><a class="anchor" aria-hidden="true" href="#tools"></a>Tools:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/11716">#11716</a>: ocamllex: mismatched parentheses and curly brackets are now caught by ocamllex, instead of causing invalid OCaml code to be generated. (Demi Marie Obenour, review by Damien Doligez and Xavier Leroy)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12904">#12904</a>: Run the testsuite with ThreadSanitizer on a PR when label <code>run-thread-sanitizer</code> is added (Olivier Nicole, suggested by S茅bastien Hinderer and David Allsopp, review by Gabriel Scherer)</p> </li> </ul> <ul> <li>(<em>breaking change</em>) <a href="https://github.com/ocaml/ocaml/issues/13114">#13114</a>: Support ocamldebug remote debugging over IPv6 on all platforms, and over Unix domain sockets on Windows. (Antonin D茅cimo, review by Gabriel Scherer and Miod Vallat)</li> </ul> <ul> <li><a href="https://github.com/ocaml/ocaml/issues/13136">#13136</a>: Rewrite GDB extensions and macros in debugger-agnostic Python, and add LLDB support for them. (Nick Barnes, review by Tim McGilchrist and Gabriel Scherer)</li> </ul> <h3 id="toplevel"><a class="anchor" aria-hidden="true" href="#toplevel"></a>Toplevel:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12891">#12891</a>: Improved styling for initial prompt (Florian Angeletti, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13053">#13053</a>: Improved display of builtin types such as <code>_ list</code> when aliased. (Samuel Vivien, review by Florian Angeletti)</p> </li> </ul> <h3 id="manual-and-documentation"><a class="anchor" aria-hidden="true" href="#manual-and-documentation"></a>Manual and documentation:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13370">#13370</a>: Document that that temporary variables holding GCd pointers must not be live across a GC. (Demi Marie Obenour)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12298">#12298</a>: Manual: emphasize that Bigarray.int refers to an OCaml integer, which does not match the C int type. (Edwin T枚r枚k, review by Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12868">#12868</a>: Manual: simplify style colours of the post-processed manual and API HTML pages, and fix the search button icon (Yawar Amin, review by Simon Grondin, Gabriel Scherer, and Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12949">#12949</a>: document OCaml release cycles and version strings in <code>release-info/introduction.md</code>. (Florian Angeletti, review by Fabrice Buoro, Kate Deplaix, Damien Doligez, and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12976">#12976</a>: Manual: use webman/<version>/*.html and webman/<version>/api/ for OCaml.org HTML manual generation (Shakthi Kannan, review by Hannes Mehnert, and Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13045">#13045</a>: Emphasize caution about behaviour of custom block finalizers. (Nick Barnes)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13216">#13216</a>: document the new <code>caml_result</code> type in the FFI chapter of the manual. (Gabriel Scherer, review by Miod Vallat, Daniel B眉nzli, Nick Barnes, Guillaume Munch-Maccagnoni and Antonin D茅cimo)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13287">#13287</a>: stdlib/sys.mli: Update documentation on Sys.opaque_identity following <a href="https://github.com/ocaml/ocaml/issues/9412">#9412</a>. (Matt Walker, review by Guillaume Munch-Maccagnoni and Vincent Laviron)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13295">#13295</a>: Use syntax for deep effect handlers in the effect handlers manual page. (KC Sivaramakrishnan, review by Anil Madhavapeddy, Florian Angeletti and Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13424">#13424</a>: Fix <code>Gc.quick_stat</code> documentation to clarify that returned fields <code>live_words</code>, <code>live_blocks</code>, <code>free_words</code>, and <code>fragments</code> are not zero. (Jan Midtgaard, review by Damien Doligez and KC Sivaramakrishnan)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13440">#13440</a>: Update documentation of <code>Gc.{control,get,set}</code> to reflect fields not currently supported on OCaml 5. (Jan Midtgaard, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13469">#13469</a>, <a href="https://github.com/ocaml/ocaml/issues/13474">#13474</a>, <a href="https://github.com/ocaml/ocaml/issues/13535">#13535</a>: Document that [Hashtbl.create n] creates a hash table with a default minimal size, even if [n] is very small or negative. (Antonin D茅cimo, Nick Bares, report by Nikolaus Huber and Jan Midtgaard, review by Florian Angeletti, Anil Madhavapeddy, Gabriel Scherer, and Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13666">#13666</a>: Rewrite parts of the example code around nested lists in Chapter 6 (Polymorphism and its limitations -&gt; Polymorphic recursion) giving the &quot;depth&quot; function [in the non-polymorphically-recursive part of the example] a much more sensible behavior; also fix a typo and some formatting. (Frank Steffahn, review by Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13668">#13668</a>: Document the basic support for unicode identifiers and the switch to UTF-8 encoded Unicode text for OCaml source file (Florian Angeletti, review by Nicol谩s Ojeda B盲r and Daniel B眉nzli)</p> </li> </ul> <h3 id="compiler-user-interface-and-warnings"><a class="anchor" aria-hidden="true" href="#compiler-user-interface-and-warnings"></a>Compiler user-interface and warnings:</h3> <ul> <li>(<em>breaking change</em>) <a href="https://github.com/ocaml/ocaml/issues/12084">#12084</a>, <a href="https://github.com/ocaml/ocaml/issues/13669">#13669</a>, <a href="https://github.com/ocaml/ocaml/issues/13673">#13673</a>: Check link order when creating archive and when using ocamlopt. (Hugo Heuzard, review by Stefan Muenzel and S茅bastien Hinderer)</li> </ul> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12980">#12980</a>: Explain type mismatch involving first-class modules by including the module level error message (Florian Angeletti, review by Vincent Laviron)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12985">#12985</a>, <a href="https://github.com/ocaml/ocaml/issues/12988">#12988</a>: Better error messages for partially applied functors. (Florian Angeletti, report by Arthur Wendling, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13034">#13034</a>, <a href="https://github.com/ocaml/ocaml/issues/13260">#13260</a>: Better error messages for mismatched function labels (Florian Angeletti, report by Daniel B眉nzli, review by Gabriel Scherer and Samuel Vivien)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13051">#13051</a>: Add a &quot;Syntax error&quot; to error messages for invalid package signatures. (Samuel Vivien, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13099">#13099</a>: Fix erroneous loading of cmis for some module type errors. (Nick Roberts, review by Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13151">#13151</a>, name conflicts explanation as a footnote (Florian Angeletti, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13228">#13228</a>: Re-export Cmt2annot.{iterator,binary_part} which had become hidden since <a href="https://github.com/ocaml/ocaml/issues/11288">#11288</a> and broke ocamlbrowser. (David Allsopp, report by Jacques Garrigue, review by S茅bastien Hinderer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13251">#13251</a>: Register printer for errors in Emitaux (Vincent Laviron, review by Miod Vallat and Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13255">#13255</a>: Re-enable warning 34 for unused locally abstract types (Nick Roberts, review by Chris Casinghino and Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12182">#12182</a>: Improve the type clash error message. For example, this message: This expression has type ... is changed into: The constant &quot;42&quot; has type ... (Jules Aguillon, review by Gabriel Scherer and Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13471">#13471</a>: add <code>-keywords &lt;version?+list&gt;</code> flag to define the list of keywords recognized by the lexer, for instance <code>-keywords 5.2</code> disable the <code>effect</code> keyword. (Florian Angeletti, review by Gabriel Scherer)</p> </li> </ul> <h3 id="internalcompiler-libs-changes"><a class="anchor" aria-hidden="true" href="#internalcompiler-libs-changes"></a>Internal/compiler-libs changes:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13286">#13286</a>: Distinguish unique identifiers <code>Shape.Uid.t</code> according to their provenance: either an implementation or an interface. (Ulysse G茅rard, review by Florian Angeletti and Leo White)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13308">#13308</a>: keep track of relations between declaration in the cmt files. This is useful information for external tools for navigation and analysis purposis. (Ulysse G茅rard, Florian Angeletti, review by Florian Angeletti and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/11129">#11129</a>, <a href="https://github.com/ocaml/ocaml/issues/11148">#11148</a>: enforce that ppxs do not produce <code>parsetree</code>s with an empty list of universally quantified type variables (<code>. int -&gt; int</code> instead of <code>'a . int -&gt; int'</code>) (Florian Angeletti, report by Simmo Saan, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12534">#12534</a>: document and refactor Matching.mk_failaction_pos (Gabriel Scherer, review by Vincent Laviron and Nick Roberts)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13076">#13076</a>: change the handling of Match_failure exits in the pattern-matching compiler, to prepare for a complete fix for <a href="https://github.com/ocaml/ocaml/issues/7241">#7241</a> (Gabriel Scherer, review by Thomas Refis and Nick Roberts)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12896">#12896</a>: Simplify the compilation of custom bytecode runtimes by explicitly compiling the primitives file before calling the linker. Tidy-up both the generating code and the output itself for C code being generated by the bytecode linker in <code>-custom</code> and <code>-output-*</code> modes. (David Allsopp, Antonin D茅cimo and Samuel Hym, review by Vincent Laviron)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12932">#12932</a>: Remove useless code in Typecore.type_label_exp (was a fix for <a href="https://github.com/ocaml/ocaml/issues/4862">#4862</a>) (Jacques Garrigue, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12943">#12943</a>: Make transient_expr.scope a bitfield, and use it to store marks. Marks are automatically allocated, and removed when leaving their scope. Falls back to using TransientTypeSet when marks are exhausted. (Jacques Garrigue and Takafumi Saikawa, review by Basile Cl茅ment)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12946">#12946</a>: Make generalization automatic when leaving scope. As a result, the <code>Ctype.generalize*</code> and <code>Ctype.correct_levels</code> functions were removed. The latter is now called <code>Ctype.duplicate_type</code>. (Jacques Garrigue and Takafumi Saikawa, review by Richard Eisenberg)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12968">#12968</a>: Attach location to constants in the parsetree (Jules Aguillon, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12959">#12959</a>, <a href="https://github.com/ocaml/ocaml/issues/13055">#13055</a>: Avoid an internal error on recursive module type inconsistency (Florian Angeletti, review by Jacques Garrigue and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13049">#13049</a>: graphical debugging printer for types (Florian Angeletti, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13074">#13074</a>, <a href="https://github.com/ocaml/ocaml/issues/13082">#13082</a>, <a href="https://github.com/ocaml/ocaml/issues/13084">#13084</a>: refactoring in the pattern-matching compiler (Gabriel Scherer, review by Thomas Refis, Vincent Laviron and Nick Roberts)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13067">#13067</a>: rework volatile memory access rules under TSan to consider properly aligned smaller-than-register read operations as atomic, which gets rid of false positives on s390x (Miod Vallat, review by Fabien Buoro)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13162">#13162</a>: Use quoted strings to clarify code being generated. (Antonin D茅cimo, review by Miod Vallat and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13015">#13015</a>: Emit floating-point literals in .rodata section on ELF arm64 platforms (Linux, *BSD). (Miod Vallat, review by Nicol谩s Ojeda B盲r)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13169">#13169</a>, <a href="https://github.com/ocaml/ocaml/issues/13311">#13311</a>: Introduce a document data type for compiler messages rather than relying on <code>Format.formatter -&gt; unit</code> closures. (Florian Angeletti, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13193">#13193</a>: Remove the unused env_init field from class blocks (Vincent Laviron, review by Jacques Garrigue)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13257">#13257</a>: integrate MetaOCaml in the Menhir grammar to ease MetaOCaml maintenance. This is a purely internal change: there is no support in the lexer, so no change to the surface OCaml grammar. (Oleg Kiselyov, Gabriel Scherer and Florian Angeletti, review by Jeremy Yallop)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13289">#13289</a>: Use C99 for loop to reduce the scope of the for loop iterator. (Antonin D茅cimo, review by Miod Vallat and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13336">#13336</a>: compiler-libs, split the <code>Printtyp</code> in three to only keep &quot;user-friendly&quot; functions in the <code>Printtyp</code> module. (Florian Angeletti, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13361">#13361</a>: split runtime/array.c functions to consistently expose uniform_array and floatarray versions, use floatarray versions in Float.Array. (Gabriel Scherer, review by Nicol谩s Ojeda B盲r)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13507">#13507</a>: A small refactoring to [free_vars] to make it a bit faster by not allocating a list when the list is not necessary. (Richard Eisenberg, review by Jacques Garrigue)</p> </li> </ul> <h3 id="build-system"><a class="anchor" aria-hidden="true" href="#build-system"></a>Build system:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12909">#12909</a>: Reorganise how MKEXE_VIA_CC is built to make it correct for MSVC by grouping all the linker flags at the end of the C compiler commandline (David Allsopp and Samuel Hym, review by Nicol谩s Ojeda B盲r)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12992">#12992</a>, <a href="https://github.com/ocaml/ocaml/issues/13009">#13009</a>: Check that flexlink can be executed only when building in a native windows environment. (Romain Beauxis, review by David Allsopp and S茅bastien Hinderer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12996">#12996</a>: Only link with -lgcc_eh when available. (Romain Beauxis, review by David Allsopp and Miod Vallat)</p> </li> </ul> <ul> <li>(<em>breaking change</em>) <a href="https://github.com/ocaml/ocaml/issues/13200">#13200</a>: Do not use CFLAGS for linking. (S茅bastien Hinderer, review by Gabriel Scherer, Antonin D茅cimo, Miod Vallat and Samuel Hym)</li> </ul> <ul> <li><a href="https://github.com/ocaml/ocaml/issues/13201">#13201</a>, <a href="https://github.com/ocaml/ocaml/issues/13244">#13244</a>: Fix and speedup builds with TSan. (S茅bastien Hinderer, review by Miod Vallat, Gabriel Scherer and Olivier Nicole)</li> </ul> <ul> <li>(<em>breaking change</em>) <a href="https://github.com/ocaml/ocaml/issues/12578">#12578</a>, <a href="https://github.com/ocaml/ocaml/issues/12589">#12589</a>, <a href="https://github.com/ocaml/ocaml/issues/13322">#13322</a>, <a href="https://github.com/ocaml/ocaml/issues/13519">#13519</a>: Use configured CFLAGS and CPPFLAGS <em>only</em> during the build of the compiler itself. Do not use them when compiling third-party C sources through the compiler. Flags for compiling third-party C sources can still be specified at configure time in the COMPILER_{BYTECODE,NATIVE}_{CFLAGS,CPPFLAGS} configuration variables. (S茅bastien Hinderer, report by William Hu, review by David Allsopp)</li> </ul> <ul> <li><a href="https://github.com/ocaml/ocaml/issues/13285">#13285</a>: continue the merge of the sub-makefiles into the root Makefile started with <a href="https://github.com/ocaml/ocaml/issues/11243">#11243</a>, <a href="https://github.com/ocaml/ocaml/issues/11248">#11248</a>, <a href="https://github.com/ocaml/ocaml/issues/11268">#11268</a>, <a href="https://github.com/ocaml/ocaml/issues/11420">#11420</a>, <a href="https://github.com/ocaml/ocaml/issues/11675">#11675</a>, <a href="https://github.com/ocaml/ocaml/issues/12198">#12198</a>, <a href="https://github.com/ocaml/ocaml/issues/12321">#12321</a>, <a href="https://github.com/ocaml/ocaml/issues/12586">#12586</a>, <a href="https://github.com/ocaml/ocaml/issues/12616">#12616</a>, <a href="https://github.com/ocaml/ocaml/issues/12706">#12706</a> and <a href="https://github.com/ocaml/ocaml/issues/13048">#13048</a>. (S茅bastien Hinderer, review by David Allsopp and Florian Angeletti)</li> </ul> <h3 id="bug-fixes"><a class="anchor" aria-hidden="true" href="#bug-fixes"></a>Bug fixes:</h3> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12854">#12854</a>: Add a test in the regression suite that flags the bug <a href="https://github.com/ocaml/ocaml/issues/12825">#12825</a>. (Luc Maranget)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12888">#12888</a>: fix printing of uncaught exceptions in <code>.cmo</code> files passed on the command-line of the toplevel. (Nicol谩s Ojeda B盲r, review by Florian Angeletti, report by Daniel B眉nzli)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12910">#12910</a>, <a href="https://github.com/ocaml/ocaml/issues/12920">#12920</a>: Fix an unsound interaction between first-class modules and polymorphic records by saving and restoring univar_pairs. (Stephen Dolan, review by Gabriel Scherer, report by Jeremy Yallop)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12994">#12994</a>: Remove un-used and unsafe caml_drop_continuation (Tim McGilchrist, reviewed by Gabriel Scherer and Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/12963">#12963</a>: Restore caml_runtime_parameters implementation. This primitive allows programs to query the runtime parameters supplied to an OCaml program. Implementation missing since OCaml 5.0. (Tim McGilchrist, reviewed by David Allsopp and Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13012">#13012</a>: parsing: Fix dropped attributes after a '-' or '+' The syntax '-(1 [@foo])' was incorrectly parsed as '-1'. (Jules Aguillon, reviewed by Gabriel Scherer, report by Gabriel Scherer)</p> </li> </ul> <ul> <li>(<em>breaking change</em>) <a href="https://github.com/ocaml/ocaml/issues/13070">#13070</a>: On Windows, when configured with bootstrapped flexdll, don't add +flexdll to the search path when -nostdlib is specified (which then means -L <path-to-flexdll> no longer gets passed to the system linker). (David Allsopp, review by Florian Angeletti)</li> </ul> <ul> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13089">#13089</a>: Fix bug in <code>runtime_events</code> library which could result in garbled output under Windows. (B. Szilvasy, review by Nicol谩s Ojeda B盲r and Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13088">#13088</a>: A few type-checker behaviors look at a type to see if there are any labeled arguments in it. This sometimes required expansion, which could, in obscure scenarios, result in superfluous type errors. (Richard Eisenberg, review by Gabriel Scherer and Jacques Garrigue)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13103">#13103</a>: FreeBSD/amd64: properly annotate .o files with non-executable stack notes (Konstantin Belousov, review by Nicol谩s Ojeda B盲r)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13150">#13150</a>: improve a transitive-closure computation algorithm in the flambda middle-end to avoid a compilation time blowup on Menhir-generated code (Florian Weimer, review by Gabriel Scherer and Pierre Chambart, report by Richard Jones)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13166">#13166</a>: Fix a MinGW/MSVC Sys.rename regression on renaming a parent directory to an empty child directory. (Jan Midtgaard, review by Antonin D茅cimo, S茅bastien Hinderer, and David Allsopp)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13185">#13185</a>, <a href="https://github.com/ocaml/ocaml/issues/13192">#13192</a>: Reject type-level module aliases on functor parameter inside signatures. (Jacques Garrigue, report by Richard Eisenberg, review by Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13170">#13170</a>: Fix a bug that would result in some floating alerts <code>[@@@alert ...]</code> incorrectly triggering Warning 53. (Nicol谩s Ojeda B盲r, review by Chris Casinghino and Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13203">#13203</a>: Do not issue warning 53 if the compiler is stopping before attributes have been accurately marked. (Chris Casinghino, review by Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13207">#13207</a>: Be sure to reload the register caching the exception handler in caml_c_call and caml_c_call_stack_args, as its value may have been changed if the OCaml stack is expanded during a callback. (Miod Vallat, report by Vesa Karvonen, review by Gabriel Scherer and Xavier Leroy)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13209">#13209</a>: Fix configure test that checks whether <code>ar</code> supports <code>@FILE</code> arguments. (Nicol谩s Ojeda B盲r, report by Boris D.)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13221">#13221</a>: Compute more accurate instruction sizes for branch relocation on POWER. (Miod Vallat, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13252">#13252</a>: Rework register assignment in the interpreter code on m68k on Linux, due to the %a5 register being used by Glibc. (Miod Vallat, report by St茅phane Glondu, review by Gabriel Scherer and Xavier Leroy)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13247">#13247</a>: Disable lib_unix/kill test for MacOS AMD64 with TSan, linking to llvm bug report causing infinite signal loops. (Tim McGilchrist, review by Olivier Nicole, Miod Vallat, S茅bastien Hinderer and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13234">#13234</a>, <a href="https://github.com/ocaml/ocaml/issues/13267">#13267</a>: Open runtime events file in read-write mode on armel (armv5) systems due to atomic operations limitations on that platform. (St茅phane Glondu, review by Miod Vallat and Vincent Laviron)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13273">#13273</a>: Fix a call to test in configure.ac that was causing errors when LDFLAGS contains several words. (St茅phane Glondu, review by Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13290">#13290</a>: Fix uninitialized and out of bounds reads in runtime_events_consumer.c (Edwin T枚r枚k, review by Miod Vallat and Antonin D茅cimo)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13306">#13306</a>: An algorithm in the type-checker that checks two types for equality could sometimes, in theory, return the wrong answer. This patch fixes the oversight. No known program triggers the bug. (Richard Eisenberg, review by Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13400">#13400</a>: Initialize th-&gt;signal_stack to avoid free of uninitialized data if the user calls caml_c_thread_unregister on the main thread. (Richard W.M. Jones, review by Guillaume Munch-Maccagnoni and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13140">#13140</a>: POWER back-end: fix issue with call to <code>caml_call_realloc_stack</code> from a DLL (Xavier Leroy, review by Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13263">#13263</a>, <a href="https://github.com/ocaml/ocaml/issues/13560">#13560</a>: fix printing true and false in toplevel and error messages (no more unexpected #true) (Florian Angeletti, report by Samuel Vivien, review by Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13388">#13388</a>, <a href="https://github.com/ocaml/ocaml/issues/13540">#13540</a>: raises an error message (and not an internal compiler error) when two local substitutions are incompatible (for instance <code>module type S:=sig end type t:=(module S)</code>) (Florian Angeletti, report by Nailen Matschke, review by Gabriel Scherer, and Leo White)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13408">#13408</a>: Fix misplaced debug runtime assertion triggerable by a race between domain exit and backup thread (Miod Vallat and Gabriel Scherer, report by Jan Midtgaard)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13417">#13417</a>: <code>Filename.quote_command</code>: fix handling of forward slashes in program path under Win32. (Nicol谩s Ojeda B盲r, review by David Allsopp and Damien Doligez)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13501">#13501</a>: Regression on mutually recursive types caused by <a href="https://github.com/ocaml/ocaml/issues/12180">#12180</a>. Resuscitate Typedecl.update_type. (Jacques Garrigue and Takafumi Saikawa, review by Florian Angeletti, Richard Eisenberg and Gabriel Scherer)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13502">#13502</a>: Fix misindexing related to <code>Gc.finalise_last</code> that could prevent finalisers from being run. (Nick Roberts, review by Mark Shinwell)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13495">#13495</a>, <a href="https://github.com/ocaml/ocaml/issues/13514">#13514</a>: Fix typechecker crash while typing objects (Jacques Garrigue, report by Nicol谩s Ojeda B盲r, review by Nicolas Ojeda B盲r, Gabriel Scherer, Stephen Dolan, Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13391">#13391</a>, <a href="https://github.com/ocaml/ocaml/issues/13551">#13551</a>: fix a printing bug with <code>-dsource</code> when using raw literal inside a locally abstract type constraint (i.e. <code>let f: type \#for. ... </code>) (Florian Angeletti, report by Nick Roberts, review by Richard Eisenberg)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13520">#13520</a>: Fix compilation of native-code version of systhreads. Bytecode fields were being included in the thread descriptors. (David Allsopp, review by S茅bastien Hinderer and Miod Vallat)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13541">#13541</a>, <a href="https://github.com/ocaml/ocaml/issues/13591">#13591</a>: Fix headers for C++ inclusion. (Antonin D茅cimo, review by Nick Barnes, report by Kate Deplaix)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13579">#13579</a>, <a href="https://github.com/ocaml/ocaml/issues/13583">#13583</a>: Unsoundness involving non-injective types + gadts (Jacques Garrigue, report by @v-gb, review by Richard Eisenberg and Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13598">#13598</a>: Falsely triggered warning 56 [unreachable-case] This was caused by unproper protection of the retyping function. (Jacques Garrigue, report by T玫ivo Leedj盲rv, review by Florian Angeletti)</p> </li> <li> <p><a href="https://github.com/ocaml/ocaml/issues/13603">#13603</a>, <a href="https://github.com/ocaml/ocaml/issues/13604">#13604</a>: fix source printing in the presence of the escaped raw identifier <code>\#mod</code>. (Florian Angeletti, report by Chris Casinghino, review by Gabriel Scherer)</p> </li> </ul> </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