Sign in

tarides.com

@tarides.com
287 followers 61 following 51 posts

We’re an international software company that helps people and organisations use #OCaml to build safer & faster code. #OCaml #FunctionalProgramming #MirageOS 🐫

PostsRepliesMedia
Reposted by @tarides.com
Chukwuma @fearful-odds.rocks · 29/07/2026
Lovely on the state of static analyzers on OCaml ecosystem. fantazio.eu/articles/sta...
fantazio.eu
fantazio.eu
052
Reposted by @tarides.com
Anil Madhavapeddy @anil.recoil.org · 27/07/2026
For any bleeding edge OxCaml users out there, I've published a fairly comprehensive update to the Claude marketplace skill for the recent minus39 (and intermediate releases); feedback welcome github.com/avsm/ocaml-c...
github.com
update skills for oxcaml minus39 release · avsm/ocaml-claude-marketplace@90cd8e9
272
Reposted by @tarides.com
Thomas Gazagnaire @gazagnaire.org · 22/07/2026
I have rewritten from scratch a CSS minifier/differ in pure OCaml, and it seems to be competitive with the best minifiers out there! gazagnaire.org/blog/2026-07... #ocaml #css #web
gazagnaire.org
Thomas Gazagnaire :: Cascade: A Typed CSS Toolkit in OCaml
Porting Tailwind to OCaml needed a CSS parser. The parser grew a typed AST, and a structural diff and a minifier fell out of it. Cascade 1.0.0 is that toolkit, and it turns out to be competitive with ...
0125
Reposted by @tarides.com
Gene Conroy-Jones @foursignalsdev.bsky.social · 21/07/2026
Jane Street's Incremental library brings efficient recomputation to OCaml: update complex computations when inputs change, not recalculate from scratch. Perfect for reactive pipelines and spreadsheet-like logic.
foursignals.dev
Incremental – A library for incremental computations
Four Signals — The Wire
032
Reposted by @tarides.com
The Lobste.rs RSS feed @lobsters-feed.bsky.social · 20/07/2026
Meta Garbage Collection: Using OCaml's GC to GC Rust lobste.rs/s/p3z0zw #rust #ml
soteria-tools.com
Meta Garbage Collection: Using OCaml's GC to GC Rust - Soteria
Tracking Rust's aliasing model can be quadratically expensive if done naively. Learn how we fixed this in Soteria Rust by doing meta garbage collection.
011
Reposted by @tarides.com
ICFP Conference @icfp-conference.bsky.social · 14/07/2026
We've got an exciting keynote lineup this year at ICFP'26...! 📌 Edward Lee: Deterministic concurrency 📌 Lindsey Kuper: Interpreters everywhere! 📌 Daan Leijen: Efficient strong functional programming with effects and compiler guided reference counting
171
Reposted by @tarides.com
Antithesis @antithesis.com · 14/07/2026
Today we’re releasing Hegel for OCaml. Hegel is a family of PBT libraries based on Hypothesis, providing powerful, ergonomic property-based testing for many different languages. Hegel lets you declare data generation inline with your test code, and provides native support for stateful testing.
1265
Reposted by @tarides.com
Anil Madhavapeddy @avsm.amok.recoil.org.ap.brid.gy · 11/07/2026
Oh this is so useful for quick scripts: octx, a CLI tool to generate type-safe OCaml serialisers for various formats. You can just check in the output to an existing project. tangled.org/patrick.sirref.org/octx by @patricoferris
tangled.org
patrick.sirref.org/octx
OCaml Code-generation Toolbox
032
tarides.com @tarides.com · 30/06/2026
The latest OCaml release is out! GC pacing improvements, relocatable OCaml, polymorphic parameters, and more 🐫 🔥 tarides.com/blog/2026-06...
tarides.com
OCaml 5.5 Summary: What's New in the Latest OCaml Update
What's new in OCaml's latest 5.5 update? New features, performance improvements, and bug fixes.
000
Reposted by @tarides.com
The Consensus @theconsensus.dev · 27/06/2026
In most languages, you hunt allocations down with a profiler and they creep back the moment you touch the hot path. Jane Street's superset of OCaml lets you flip that around: annotate a function with [@zero_alloc] and the compiler refuses to build if anything in its call tree touches the heap.
1509
Reposted by @tarides.com
Rock the JVM @rockthejvm.com · 09/06/2026
New podcast episode! Richard Eisenberg on OCaml, effective AI, teaching programming, career pivot points, Haskell, language design, hiring and much more: youtu.be/PpSIhcJOfbw
youtu.be
Richard Eisenberg on OCaml, Effective AI, Teaching FP and Hiring for Fundamentals
YouTube video by Rock the JVM
151
Reposted by @tarides.com
BOB Konferenz @bobkonf.de · 03/06/2026
Video of @xvw.lol 's #BOBkonf2026 talk "A crash course on the OCaml module language" is now online! Find it here: bobkonf.de/2026/woestyn...
bobkonf.de
BOB - A crash course on the OCaml module language
BOB Konferenz, Best of Breed Konferenz für Software-Entwickler und Entscheider in der Softwareentwicklung.
085
Reposted by @tarides.com
ICFP Conference @icfp-conference.bsky.social · 05/06/2026
Looking to demo your work? Teach people how to use a cool new language you've built? Give an introduction to all the beautiful nitty gritty details of your research? Submit a tutorial proposal! Deadline is ** June 21, 2026 ** More info here icfp26.sigplan.org/track/icfp-2...
icfp26.sigplan.org
ICFP 2026 - ICFP Tutorials - ICFP 2026
Welcome to the website of the ICFP 2026 conference. We are working hard to fill the website with all related information. Please check back soon! The ACM SIGPLAN International Conference on Functional...
032
Reposted by @tarides.com
BOB Konferenz @bobkonf.de · 08/06/2026
Video of Paul-Elliot's #BOBkonf2026 talk "Undoable Monad" is now up! bobkonf.de/2026/paul-el...
bobkonf.de
BOB - Going back in time with the Undoable Monad
BOB Konferenz, Best of Breed Konferenz für Software-Entwickler und Entscheider in der Softwareentwicklung.
065
Reposted by @tarides.com
Cartero @news.karthihegde.dev · 03/06/2026
Announcing Pyro Caml: The First Continuous Profiler for OCaml Discussion | lobsters | Author: edwintorok
semgrep.dev
Announcing Pyro Caml: The First Continuous Profiler for OCaml
Semgrep open-sources Pyro Caml 1.0.0, the first continuous profiler for OCaml. Learn how it uses Memprof, OCaml Runtime Events, and Pyroscope to profile production workloads running under gVisor with under 5% overhead.
092
Reposted by @tarides.com
Tim McGilchrist @tsmc.purely-functional.com · 04/06/2026
Bonsai_term looks very cool. blog.janestreet.com/strace-ui-bo... #ocaml
blog.janestreet.com
strace-ui, Bonsai_term, and the TUI renaissance
We’ve always found strace useful but somewhat hard to work with. Its output is often inscrutable, it’s hard to follow subprocesses or threads, and if you wan...
083
Reposted by @tarides.com
SagaLinked @sagalinked.bsky.social · 03/06/2026
📰 Pyro Caml Continuous Profiler for OCaml is an open-source tool designed to provide real-time performance analysis and optimization capabilities for OCaml applications. 🔗 semgrep.dev/blog/2026/announcing-py… #Tech #Dev
semgrep.dev
Announcing Pyro Caml: The First Continuous Profiler for OCaml | Semgrep
Semgrep open-sources Pyro Caml 1.0.0, the first continuous profiler for OCaml. Learn how it uses Memprof, OCaml Runtime Events, and Pyroscope to profile production workloads running under gVisor with under 5% overhead.
032
Reposted by @tarides.com
Benjamin Thuillier @gilwath.com · 01/06/2026
Did I continue my exploration of OCaml? Yes. Was it fun? Definitely. And did I learn a few things? Absolutely gilwath.com/articles/fro... #OCaml #Scala
gilwath.com
Discovering OCaml as a Scala Developer Part 2: Building a CRUD HTTP API
Building the same small Tasks CRUD API in both Scala and OCaml, and comparing the experience side by side.
1116
tarides.com @tarides.com · 29/05/2026
Join Tim on a tour of 🐫 OCaml's newest features in our latest tech talk ✨ www.youtube.com/watch?v=Wv0p...
youtube.com
Tech Talk: A Tour of Recently Added Features in OCaml by Timéo Arnouts
YouTube video by Tarides
061
Reposted by @tarides.com
Ian Henry @ianthehenry.bsky.social · 28/05/2026
I am a huge fan of Bonsai and Bonsai_term is an incredible extension. It's an amazing way to build rich TUIs in OCaml! blog.janestreet.com/strace-ui-bo...
blog.janestreet.com
strace-ui, Bonsai_term, and the TUI renaissance
We’ve always found strace useful but somewhat hard to work with. Its output is often inscrutable, it’s hard to follow subprocesses or threads, and if you wan...
2165
tarides.com @tarides.com · 21/05/2026
Convert Lwt libraries to Eio concurrency with the new 'ciao-lwt' set of tools! Learn more on our blog: tarides.com/blog/2026-03...
tarides.com
Announcing `ciao-lwt`: A Library for Migrating Lwt to Eio
Announcing a new collection of tools to automate the migration from Lwt to Eio!
020
Reposted by @tarides.com
randyisrandom.bsky.social @randyisrandom.bsky.social · 18/05/2026
I unexpectedly met another OCamleer at the LF Open source Summit. He delivered an awesome talk and there’s a call for maintainers for his DSL. 🐫♾️🐫 #OCaml #Linux github.com/multikernel/...
184
tarides.com @tarides.com · 13/05/2026
Discover the tweaks we have made to optimise Wasm_of_ocaml over the past year in this update from the blog: tarides.com/blog/2026-02...
tarides.com
Announcing New Wasm_of_ocaml Optimisations
Discover the latest optimisations we have brought to Wasm_of_ocaml in 2025!
071
Reposted by @tarides.com
Litherum @litherum.bsky.social · 04/05/2026
Somehow, the fact that there are OCaml bindings to Vulkan makes me extremely happy (No sarcasm) github.com/Octachron/ol...
github.com
GitHub - Octachron/olivine: Ocaml binding generator for vulkan
Ocaml binding generator for vulkan. Contribute to Octachron/olivine development by creating an account on GitHub.
0102
Reposted by @tarides.com
OCaml @ocaml.org · 30/04/2026
The OCaml Users Survey 2026 is now open! 📊 Share your experience with OCaml - from tools you use to new questions on AI/LLM tooling and debugging. Takes 10-15 minutes, open until May 25th. forms.gle/gt5nikqUmoQWeYYQ9
178
Reposted by @tarides.com
Chris Armstrong @chrisarmstrong.link · 21/04/2026
And ocgtk is now on opam www.chrisarmstrong.dev/posts/ocgtk-...
chrisarmstrong.dev
ocgtk preview1 now on opam
ocgtk, a set of GTK4 bindings for OCaml, is now available on opam as preview1 release
241
tarides.com @tarides.com · 21/04/2026
The odoc 3 release came with some big upgrades! Learn more about them and how OCaml.org is using the new features on the blog: tarides.com/blog/2026-01...
tarides.com
OCaml.org Now Uses `odoc` 3: What’s New?
Check out the features that come with the latest version of OCaml's documentation tool odoc!
041
Reposted by @tarides.com
OCaml @ocaml.org · 16/04/2026
dlvr.it
Wasm_of_ocaml: What Changed Since 6.1
Wasm_of_ocaml compiles OCaml bytecode to WebAssembly, targeting WasmGC so that OCaml values are managed by the host garbage collector. This post covers the most relevant Wasm changes in versions 6.1 through 6.3, and three PRs that add WASI support, native effects via Stack Switching, and dynlink/toplevel support. The Background section at the end has a short recap of where the project fits alongside js_of_ocaml. What changed in 6.1-6.3 The full changelog covers all three releases in detail. Below are the changes most relevant to the Wasm backend. The compiler writes Wasm binaries directly now (6.1) Before 6.1, the compiler emitted WAT (WebAssembly text format) and then converted it to binary via Binaryen. Since 6.1, it writes .wasm binary modules directly, removing that conversion step. Binaryen is still a required system dependency. WAT output is still available for debugging and is also faster to generate now. Better Wasm code generation (6.1-6.3) Several changes across 6.1-6.3 improve the quality of the generated Wasm code: * Direct calls for known functions (6.1). When the compiler can determine the target of a function call at compile time, it emits a call_ref instruction. Having context on which functions are called where enables the Binaryen toolchain to better optimize the generated Wasm code. * Precise closure environment types (6.1). Closures carry refined WasmGC struct types for their captured variables instead of generic arrays. This gives the Wasm engine exact layout information. * Closure code pointer omission (6.2). When a closure is never called indirectly through a generic apply, the code pointer field is omitted from the closure struct entirely. * Number unboxing (6.3). The compiler tracks unboxed int/float values through chains of arithmetic operations and keeps them in Wasm locals instead of allocating heap boxes. This is the kind of optimization that makes tight numerical loops actually fast. * Reference unboxing (6.3). ref cells that don't escape a function become Wasm locals instead of heap-allocated mutable GC structs. * Specialized comparisons and bigarray ops (6.3). Instead of dispatching through caml_compare or generic bigarray accessors, the compiler emits type-specific Wasm instructions when it can resolve types statically. There are also shared compiler improvements (benefiting both js_of_ocaml and wasm_of_ocaml): the inlining pass was rewritten in 6.1 (#1935, #2018, #2027) with better tailcall optimization, deadcode elimination, and arity propagation between compilation units. Runtime additions (6.1-6.3) * Marshal now handles zstd-compressed values in the Wasm runtime (6.1, fix in 6.3). * Bigarray element access uses DataView get/set, which is faster than the typed array primitives that we used before (6.1). * Effect handler continuation resumption is more efficient (6.1). * Unix.times works in the Wasm runtime (6.3). * Dom_html.onload added for Wasm-compatible load event handling -- the JS window.onload pattern doesn't work when Wasm modules load asynchronously (6.3). Compatibility 6.1 dropped OCaml 4.12 and earlier, requires Dune 3.19, and added preliminary OCaml 5.4 support. The compiler runs on Node.js 22+ (which has WasmGC support), CloudFlare Workers (V8 12.0+), and WasmEdge 0.14.0+. Three Features in Flight The three PRs below address the three biggest limitations of wasm_of_ocaml relative to js_of_ocaml: no standalone execution outside the browser, CPS overhead for effects, and no dynlink/toplevel. Dynlink/toplevel (#2187) was merged on 2026-04-08; the other two are still open. WASI support (PR #1831) Until now, wasm_of_ocaml has been browser-oriented: the generated Wasm module expects a JavaScript host to provide I/O, filesystem access, and so on. WASI (WebAssembly System Interface) is a standard set of system-call-like imports that lets Wasm modules run on standalone runtimes without a JS host. This PR by Jerome Vouillon adds a --enable wasi flag: wasm_of_ocaml --enable wasi foo.byte -o foo.js The output still follows the existing convention (a .js file and a .assets/ directory with the .wasm code), but the Wasm file can now also be run directly on standalone runtimes. On the Wizard engine (which supports legacy exception handling): wizeng.x86-64-linux -ext:stack-switching -ext:legacy-eh foo.assets/code.wasm For wasmtime and other runtimes using the newer exnref-based exception handling, compile with --enable exnref: wasm_of_ocaml --enable wasi --enable exnref foo.byte -o foo.js wasmtime -W=all-proposals=y foo.assets/code.wasm The --enable exnref flag selects the newer exnref-based exception handling spec rather than the legacy proposal used by V8/Chrome and the Wizard engine. The implementation is substantial: a WASI-compatible filesystem (fs.wat), Unix API bindings covering file operations, process info, time, and permissions (unix.wat), a minimal libc (libc.c/libc.wasm), WASI memory management and errno mapping, and a Node.js wrapper for running WASI binaries under Node. Native effects via Stack Switching (PR #2189) OCaml 5 effect handlers need the ability to suspend a computation, run a handler, and resume. In the native OCaml compiler, this is implemented using stack segments. In wasm_of_ocaml, we rely on JSPI by default, which does not cost much when effects are not used, but is comparatively slow when effects are used as core control flow. However, there's also the option of using CPS-transformation: every function that might perform an effect gets a continuation parameter, and perform/continue/discontinue manipulate these closures explicitly. This works but has overhead -- extra closure allocations, indirect calls, and the CPS transform obscures the control flow, which inhibits other optimizations. The WebAssembly Stack Switching proposal (currently Phase 3 in the Wasm standardization process) adds a third implementation: native primitives for creating, suspending, and resuming stacks. This maps directly onto what OCaml's effect handlers need. This PR by Jerome Vouillon adds a --effects native flag: wasm_of_ocaml --effects native foo.byte -o foo.js When enabled, the CPS transformation is skipped entirely. Instead, perform suspends the current Wasm stack, the handler runs on the parent stack, and continue resumes the suspended stack -- using the primitives from the Stack Switching explainer. The implementation is in a new effect-native.wat runtime module. This should remove the CPS overhead for code using Eio, Domain.DLS, or Lwt with its effects backend. Stack Switching is not yet in stable browser releases (Chrome/V8 has it behind a flag), so the CPS path remains the default. Dynlink and toplevel support (PR #2187, merged 2026-04-08) One of the most visible limitations of wasm_of_ocaml compared to js_of_ocaml was the lack of Dynlink support, which also meant no OCaml toplevel (REPL) in the browser. The OCaml Playground currently uses js_of_ocaml for exactly this reason. This PR by Jerome Vouillon adds both. Concretely, it provides: * A wasm_of_ocaml_compiler_dynlink library that can compile .cmo files to Wasm and load them at runtime -- the Wasm equivalent of what JsooTop does for js_of_ocaml. * A toplevel.wat runtime module implementing the low-level primitives for registering dynamically loaded code with the Wasm module system. * A graphics.wat module implementing the OCaml Graphics library in WAT. * Virtual filesystem improvements so the toplevel can access .cmi files at runtime. * The Lwt toplevel example updated to build with both js_of_ocaml and wasm_of_ocaml. * A new test suite (compiler/tests-dynlink-wasm/) covering loadfile, loadfile_private, compile-and-load, effects flags, and plugin dependencies. As noted in the PR discussion, the virtual filesystem work also allows compiler/tests-toplevel to run under Wasm. This opens a path to running the OCaml.org Playground on wasm_of_ocaml instead of js_of_ocaml. Background: Wasm_of_ocaml and OCaml-to-Wasm compilation Wasm_of_ocaml started as a fork of js_of_ocaml by Jerome Vouillon (with major contributions from Hugo Heuzard), became a new backend in the js_of_ocaml project, and is now developed alongside it: since version 6.0.1 (the first public release, February 2025), wasm_of_ocaml and js_of_ocaml share a single repository and are released together. It targets WasmGC (supported in Chrome 119+, Firefox 120+, and Safari 18.2+), the tail-call extension, and the exception handling extension. Using WasmGC means OCaml values are managed by the host GC directly; no custom collector is shipped, and JS interop works through shared GC'd references. The project was presented at the ML Workshop at ICFP 2024. A separate project, Wasocaml by OCamlPro, also targets WasmGC but compiles from the Flambda IR of the native-code compiler rather than from bytecode. Jane Street has reported 2x-8x speedups from wasm_of_ocaml over js_of_ocaml on their workloads. The OCaml.org WebAssembly page has an overview of all OCaml-to-Wasm compilation options. Getting involved If you want to try wasm_of_ocaml, the manual covers setup with Dune. If you're already using js_of_ocaml, it's mostly a matter of adding a wasm_of_ocaml stanza: opam install wasm_of_ocaml-compiler js_of_ocaml js_of_ocaml-ppx js_of_ocaml-lwt wasm_of_ocaml-compiler depends on a system installation of Binaryen 119 or later. Bug reports and contributions go to the js_of_ocaml repository. Discussion happens on the OCaml Discuss forum.
062
Reposted by @tarides.com
Chris Armstrong @chrisarmstrong.link · 15/04/2026
I’ve already announced this on the forums, but for everyone else www.chrisarmstrong.dev/posts/introd...
chrisarmstrong.dev
Introducing ocgtk: GTK4 bindings for OCaml
Introducing ocgtk, a new set of GTK4 bindings for OCaml generated from GObject Introspection data.
1163
Reposted by @tarides.com
OCaml @ocaml.org · 10/04/2026
[OCaml Planet] Building a satellite collision screening pipeline from scratch in OCaml - complete with validation against reference data and browser-based 3D visualization. gazagnaire.org/blog/2026-04-07-ssa.…
gazagnaire.org
Thomas Gazagnaire :: Predicting Satellite Collisions in OCaml
Open test data for predicting satellite collisions. I built the full screening pipeline in OCaml, validated it against the answer key, and put a 3D globe in the browser.
072
Reposted by @tarides.com
Thomas Gazagnaire @gazagnaire.org · 07/04/2026
Predicting satellite collisions in OCaml! The screening pipeline matches the TraCSS answer key, and the 3D globe runs in the browser via js_of_ocaml. gazagnaire.org/blog/2026-04... #space #OCaml
gazagnaire.org
Thomas Gazagnaire :: Predicting Satellite Collisions in OCaml
Open test data for predicting satellite collisions. I built the full screening pipeline in OCaml, validated it against the answer key, and put a 3D globe in the browser.
092
Reposted by @tarides.com
Martin Jambon @mjambon.bsky.social · 07/04/2026
I've created a complete, pure-OCaml YAML library called YAMLx (Yumyulack was too long). It will be suitable for reading config files in your applications as well as for analyzing YAML files used by other projects. Aiming for a release by the end of this week. github.com/mjambon/yamlx #ocaml #YAML
github.com
GitHub - mjambon/yamlx: Pure-OCaml YAML 1.2 & 1.1 Library
Pure-OCaml YAML 1.2 & 1.1 Library. Contribute to mjambon/yamlx development by creating an account on GitHub.
152
Reposted by @tarides.com
Thomas Gazagnaire @gazagnaire.org · 02/04/2026
I've finally managed to write why I'm doing a bit more regularly. Hint: it took a while because I had first to rewrite the world in #OCaml ... gazagnaire.org/blog/2026-04...
gazagnaire.org
Thomas Gazagnaire :: A CSS Engine in OCaml
A typed CSS parser covering Level 3 through 5, a structural diff tool, and an optimiser. With a live browser demo via js_of_ocaml.
2218
Reposted by @tarides.com
Michael Kohl @citizen428.net · 03/04/2026
A CSS Engine in OCaml gazagnaire.org/blog/2026-04-02-casc… #ocaml
gazagnaire.org
Thomas Gazagnaire :: A CSS Engine in OCaml
A typed CSS parser covering Level 3 through 5, a structural diff tool, and an optimiser. With a live browser demo via js_of_ocaml.
041
tarides.com @tarides.com · 01/04/2026
Check out our new video tutorial on setting up your first project with Dune, including how to use watch mode, modules, and yojson! 🐫 www.youtube.com/watch?v=F_PR...
youtube.com
OCaml Tutorial: Getting Started with Your First Project
YouTube video by Tarides
020
tarides.com @tarides.com · 30/03/2026
Dive into static analysis and how it's used to verify properties of programs in Charlene Gros' Tech Talk on our YouTube channel🐫 www.youtube.com/watch?v=EALz...
youtube.com
Introduction to Static Analysis via Abstract Interpretation by Charlene Gros
YouTube video by Tarides
031
Reposted by @tarides.com
OCaml @ocaml.org · 26/03/2026
[OCaml Planet AI] Four Outreachy interns presented their contributions to Raven, OCaml-TIFF, and YOCaml at the December 2025 Demo Day.
131
Reposted by @tarides.com
OCaml @ocaml.org · 20/03/2026
[OCaml Planet AI] Practical OCaml: building a fuel price finder. The UK Fuel Finder API provides real-time data from over 7,000 petrol stations nationwide.
121
tarides.com @tarides.com · 19/03/2026
The new ocaml.nvim plugin provides Neovim integration to OCaml's LSP server – giving users access to advanced ocaml-lsp features with less fuss 🌟 tarides.com/blog/2025-12...
tarides.com
Creating `ocaml.nvim` to Bring Neovim Support to OCaml's LSP Server
Introducing the `ocaml.nvim` plugin, which integrates OCaml's Neovim editor with the LSP.
072
Reposted by @tarides.com
sabine 🐫🦀 / "use ocaml"; @sabine.sh · 14/03/2026
if you're using OCaml and neovim, the editors team would like your input here: discuss.ocaml.org/t/adoption-of-the…
discuss.ocaml.org
Adoption of the Neovim plugin for OCaml
We recently released a new NeoVim plugin for OCaml. It has been live for a few months now (you can find the announcement here if you are curious), and we would like to know what you think of it. The next step is to improve the plugin in order to better meet the expectations of the users. To do that, it would be very helpful for us if you could reply to the following poll. Do not hesitate to share your thoughts about the plugin, both positive and negative, and any ideas are also welcome. We are ...
1143
Reposted by @tarides.com
BOB Konferenz @bobkonf.de · 13/03/2026
Talk track A at #BOBkonf2026 starts off with @xvw.lol 's "A crash course on the OCaml module language"!
Xavier van de Woestyne presents "A crash course on the OCaml module language" at BOBkonf 2026. A slide in the background reads "Why this presentation & warning"
1168
Reposted by @tarides.com
BOB Konferenz @bobkonf.de · 13/03/2026
Tutorial track B at #BOBkonf2026 continues with @lyrm.bsky.social and Sudha Parimala's tutorial "Parallelism without panic: a user’s guide to multicore safety in OCaml".
Carine Morel and Sudha Parimala teaching their tutorial "Parallelism without panic: a user’s guide to multicore safety in OCaml" at BOBkonf 2026.
0115
Reposted by @tarides.com
BOB Konferenz @bobkonf.de · 10/03/2026
After lunch, tutorial track B at #BOBkonf2026 continues with @lyrm.bsky.social and Sudha Parimala's "Parallelism without panic: a user’s guide to multicore safety in OCaml". Find out more here: bobkonf.de/2026/morel.h...
197
Reposted by @tarides.com
xvw @xvw.lol · 05/03/2026
Wow Eliom + Wasm Of OCaml is released (thanks to the @ocsigen.org toolchain) ! discuss.ocaml.org/t/eliom-12-c... #OCaml #ocsigen #wasm
discuss.ocaml.org
Eliom 12: Client-server applications in Web Assembly
On behalf of the Ocsigen team, I am pleased to announce the release of Eliom 12. Following our recent release of wasm_of_ocaml, this version’s main feature is full support for Web Assembly. Eliom appl...
1125
Reposted by @tarides.com
patrick @patrick.sirref.org · 02/03/2026
The #OCaml community will be taking part in #outreachy in May 2026. You can read more about it and consider signing up as a mentor at the following link 🐫 discuss.ocaml.org/t/outreachy-...
discuss.ocaml.org
Outreachy May 2026
Hello everyone, The OCaml community has signed up to Outreachy May 2026 (see past posts)! What is Outreachy? Outreachy is a paid, remote internship program. Outreachy promotes diversity in open sou...
043
Reposted by @tarides.com
David Sancho @david.sancho.dev · 25/02/2026
such a great feeling when you find all your stack used in the wild
142
Reposted by @tarides.com
ICFP Conference @icfp-conference.bsky.social · 19/02/2026
It's paper submission day!! How's your's shaping up?
111
tarides.com @tarides.com · 17/02/2026
Take a journey back to Singapore and the biggest functional programming conference of 2025 in this post from our blog: tarides.com/blog/2025-12...
tarides.com
ICFP 2025: Looking Back at the Biggest Functional Programming Conference of the Year
Check out our summary of everything OCaml at ICFP 2025, including insights from the Tarides engineers who attended!
031
Reposted by @tarides.com
The ML Engineer @handle.invalid · 16/02/2026
Tessera pipeline in OCaml www.tunbury.org/2026/02/15/ocaml-te… #machinelearning #datascience
tunbury.org
Tessera pipeline in OCaml
Summary: OCaml bindings and GPU tests for Tessera pipeline, using numpy-like arrays, OCaml-npy, stac-client, GDAL bindings, ONNX runtime with a C shim
031
Reposted by @tarides.com
Anil Madhavapeddy @avsm.amok.recoil.org.ap.brid.gy · 12/02/2026
OxCaml isn't just useful due to its language extensions; it's making us think through how to engineer OCaml code to be lower allocation by default even before switching. See Mark's progress on an MP3 decoder to speed it up 10x www.tunbury.org/2026/02/11/ocaml-mp3
tunbury.org
Optimizing an MP3 Codec with OCaml/OxCaml
After reading Anil’s post about his zero-allocation HTTP parser httpz, I decided to apply some OxCaml optimisation techniques to my pure OCaml MP3 encoder/decoder. The OCaml-based MP3 encoder/decoder has been the most ambitious project I’ve tried in Opus 4.5. It was a struggle to get it over the line, and I even needed to read large chunks of the ISO standard and get to grips with some of the maths and help the AI troubleshoot. # Profiling an OCaml MP3 Decoder with Landmarks Before dividing into OxCaml, I wanted to get a feel for the current performance and also to make obvious non-OxCaml performance improvements; otherwise, I would be comparing an optimised OxCaml version with an underperforming OCaml version. It was 40 times slower than `ffmpeg`: 29.5 seconds to decode a 3-minute file versus 0.74 seconds. I used the landmarks profiling library to identify and fix the bottlenecks, bringing decode time down to 3.5 seconds (a 8x speedup). ## Setting Up Landmarks Landmarks is an OCaml profiling library that instruments functions and reports cycle counts. It was easy to add to the project (*) with a simple edit of the `dune` file: (libraries ... landmarks) (preprocess (pps landmarks-ppx --auto)) The `--auto` flag automatically instruments every top-level function — no manual annotation needed. Running the decoder with `OCAML_LANDMARKS=on` prints a call tree with cycle counts and percentages. > (*) It needed OCaml 5.3.0 for `landmarks-ppx` compatibility; it wouldn’t install on OCaml 5.4.0 due to a ppxlib version constraint. ## Issues 78% of the time was spent in the Huffman decoding, specifically `decode_pair`. The implementation read one bit at a time, then scanned the table for a matching Huffman code. I initially tried a Hashtbl, which was much better than the scan before deciding to use array lookup instead. The bitstream operations still accounted for much of the time, but these could be optimised with appropriate `Bytes.get_...` calls, as the most frequent path is reading 32 bits in big endian layout. The profile now showed `find_sfb_long` consuming 3.4 billion cycles inside requantization. This function does a linear search through scalefactor band boundaries for every one of the 576 frequency lines, every granule, every frame. Switching to precomputed 576-entry arrays mapping each frequency line directly to its scalefactor band index. There were some additional tweaks, such as adding more precomputed lookup tables stored in `floatarray`, using `[@inline]` and `unsafe_get`, `land` instead of `mod`. After this, no single function dominated the profile, and I could move on to OxCaml. # OxCaml OxCaml has `float#`, an unboxed float type that lives in registers, and `let mutable` for stack-allocated mutable variables. Together, they let you write inner loops where the accumulator never touches the heap: module F = Stdlib_upstream_compatible.Float_u let[@inline] imdct_long input = for i = 0 to 35 do let mutable sum : float# = F.of_float 0.0 in for k = 0 to 17 do let cos_val = F.of_float (Float.Array.unsafe_get cos_table (i * 18 + k)) in let inp_val = F.of_float (Array.unsafe_get input k) in sum <- F.add sum (F.mul inp_val cos_val) done; Array.unsafe_set output i (F.to_float sum) done These kinds of optimisations got me from 2.35s down to 2.01s. What I felt was missing was an accessor function which returned an unboxed float from a floatarray, so I wouldn’t need to unbox with `F.of_float`. However, I couldn’t find it. The httpz parser really benefited from OxCaml’s unboxed types because its hot path operates on small unboxed records that stay entirely in registers: #{ off: int16#; len: int16# } # Results The optimisations brought a 29.5s MP3 decoder down to 2.01s. Mostly through standard OCaml optimisations, but OxCaml’s `float#` saved another ~14%. Decoder | Time | vs ffmpeg ---|---|--- ffmpeg | 0.74s | 1x LAME | 0.81s | 1.1x ocaml-mp3 (original) | 29.5s | 40x ocaml-mp3 (Hashtbl) | 6.4s | 8.6x ocaml-mp3 (flat + fast bitstream) | 3.5s | 4.7x ocaml-mp3 (best) | 2.4s | 3.2x ocaml-mp3 (OxCaml) | 2.0s | 2.7x
0105