WIP INTERNAL TO OCAML PLATFORM TEAM - DO NOT SHARE
Welcome to the tenth edition of the OCaml Platform newsletter!
In this February 2024 edition, we are excited to bring you the latest on the OCaml Platform, continuing our tradition of highlighting recent developments as seen in previous editions. To understand the direction we're headed, especially regarding development workflows and user experience improvements, check out our roadmap.
Highlights:
Merlin 4.14-502~preview
(@voodoos (Tarides))Ocaml-lsp-server 1.18.0~5.2preview
(@voodoos (Tarides))Ppxlib 0.32.1~5.2preview
(@NathanReb (partly funded by the OCaml Software Foundation)).Releases:
Contributed by: @rgrinberg (Tarides), @Leonidas-from-XIV (Tarides), @gridbugs (Tarides), @kit-ty-kate (Tarides), @Alizter
Why: Unify OCaml tooling under a single command line for all development workflows. This addresses one of the most important pain points reported by the community.
What: Prototyping the integration of package management into Dune using opam as a library. We're introducing a dune pkg lock
command to generate a lock file and enhancing dune build
to handle dependencies in the lock file. More details in the Dune RFC.
Activities:
topkg
due to ocamlbuild
build failures. This led to identifying an error with directory symlink handling in Dune ocaml/dune#9873, ocaml/dune#9937git config
directly (ocaml/dune#9905), and enhancements to how Dune handles Git repositories, such as the checking out of Git repos via rev_store
(ocaml/dune#10060).Contributed by: @rjbou (OCamlPro), @kit-ty-kate (Tarides), @dra27 (Tarides), @AltGr (OCamlPro)
Why: Enhance OCaml's viability on Windows by integrating native opam and opam-repository
support, fostering a larger community, and more Windows-friendly packages.
What: Releasing opam 2.2 with native Windows support, making the official opam-repository
usable on Windows platforms.
Activities:
/usr/bin/env
, enhancing compatibility and user experience for those utilising Cygwin alongside cmd
or PowerShell. โ #5797noacl
in /etc/fstab
for /cygdrive
mount, this change avoids permission mismatch errors, enhancing reliability and usability for Cygwin users. โ #5796winsymlinks:native
to the Cygwin environment variable, improving compatibility within the Cygwin ecosystem. โ #5793git-location
configurations during initialisation, streamlining Git integration and providing clearer control over Git settings. โ #5848odoc
] Unify OCaml.org and Local Package Documentation (W25)Contributed by: @jonludlam (Tarides), @julow (Tarides), @panglesd (Tarides), Luke Maurer (Jane Street)
Why: Improving local documentation generation workflow will help package authors write better documentation for their packages, and consolidating the different odoc
documentation generators will help make continuous improvements to odoc
available to a larger audience.
What: We will write conventions that drivers must follow to ensure that their output will be functional. Once established, we will update the Dune rules to follow these rules, access new odoc
features (e.g., source rendering), and provide similar functionalities to docs.ocaml.org (a navigational sidebar, for instance). This will effectively make Dune usable to generate OCaml.org package documentation.
Activities:
odoc
drivers conventions shared by Dune and OCaml.org, and we plan to publish the RFC in March.odoc
. Several prototypes have been developed and discussed with the team, and we will resume work on the sidebar implementation once the driver conventions have been adopted.odoc
] Add Search Capabilities to odoc
(W25)Contributed by: @panglesd (Tarides), @EmileTrotignon (Tarides), @julow (Tarides), @jonludlam (Tarides)
Why: Improve usability and navigability in OCaml packages documentation, both locally and on OCaml.org, by offering advanced search options like type-based queries.
What: Implementing a search engine interface in odoc
, complete with a UI and a search index. Additionally, we're developing a default client-side search engine based on Sherlodoc.
Activities:
odoc
] Improving odoc
Performance (W25)Contributed by: @jonludlam (Tarides), @julow (Tarides), @gpetiot (Tarides)
Why: Address performance issues in odoc
, particularly for large-scale documentation, to enhance efficiency and user experience and unlock local documentation generation in large code bases.
What: Profiling odoc
to identify the main performance bottlenecks and optimising odoc
with the findings.
Activities:
odoc
's handling of transitive library dependencies, shape lookup, and module-type-of expansions โ ocaml/odoc#1078, ocaml/odoc#1081odoc
files in accessible paths, cutting the time to generate documentation by two in some of our tests โ ocaml/odoc#1075Contributed by: @voodoos (Tarides)
Why: Enhance code navigation and refactoring for developers by providing project-wide reference editor features, aligning OCaml with the editor experience found in other languages.
What: Introducing ocamlmerlin server occurrences
and LSP textDocument/references
support, extending compiler's Shapes for global occurrences and integrating these features in Dune, Merlin, and OCaml LSP.
Activities:
merlin-lib
, we've rebased the project-wide occurrences work over it.Contributed by: @pitag (Tarides), @Engil (Tarides)
Why: Some Merlin queries have been shown to scale poorly in large codebases, making the editor experience subpar. Users report that they sometimes must wait a few seconds to get the answer. This is obviously a major issue that hurts developer experience, so we're working on improving Merlin performance when it falls short.
What: Developing benchmarking tools and optimising Merlin's performance through targeted improvements based on profiling and analysis of benchmark results.
Activities:
merlin-lib
, we've continued the work on a prototype to process the buffer in parallel with the query computation. Parallelism refers to OCaml 5 parallelism (domains).