Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Alan Schmitt <alan.schmitt@polytechnique.org>
To: "lwn" <lwn@lwn.net>, caml-list@inria.fr
Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News
Date: Tue, 30 Jul 2024 15:26:22 +0200	[thread overview]
Message-ID: <m2r0bbt3i9.fsf@mac-03220211.irisa.fr> (raw)

[-- Attachment #1: Type: text/plain, Size: 9970 bytes --]

Hello

Here is the latest OCaml Weekly News, for the week of July 23 to 30,
2024.

Table of Contents
─────────────────

.mlx syntax dialect
heml, a HEEx-inspired HTML templating ppx for OCaml
Forester 4.2
First Robotics and OCaml - Do you know any local teams?
2nd editor tooling dev-meeting: 25th of July 🧙
Other OCaml News
Old CWN


.mlx syntax dialect
═══════════════════

  Archive: <https://discuss.ocaml.org/t/ann-mlx-syntax-dialect/15035/1>


Andrey Popp announced
─────────────────────

  Dear OCaml community,

  it is my pleasure to announce a release of [.mlx] dialect.

  The .mlx dialect extends OCaml syntax with JSX expression construct,
  following the example of JSX in JavaScript/ReasonML. A brief snippet:

  ┌────
  │ let page ?(encoding="utf8") ~title ~content =
  │   <html>
  │     <head>
  │       <meta charset=encoding />
  │       <title>title</title>
  │     </head>
  │     <body>
  │       content
  │     </body>
  │   </html>
  │ 
  │ let _ = <page title="Hello" content="World" />
  └────

  The main use case is to make it easier to describe user interfaces
  with OCaml, which can range from generating HTML ([example with
  Dream]) or describing interactive UIs with ReasonReact ([example]).


[.mlx] <https://github.com/ocaml-mlx/mlx>

[example with Dream]
<https://github.com/aantron/dream/blob/dc805cb46fd99001bc828cddb9de053a3dc464eb/example/w-mlx/README.md>

[example]
<https://github.com/andreypopp/melange-mlx-template/blob/main/src/ReactApp.mlx>

Installation and usage
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  Install the packages from opam:
  ┌────
  │ opam install mlx ocamlmerlin-mlx
  └────

  Then configure dune to use the `mlx' preprocessor:

  ┌────
  │ (dialect
  │  (name mlx)
  │  (implementation
  │   (extension mlx)
  │   (merlin_reader mlx)
  │   (preprocess
  │    (run mlx-pp %{input-file}))))
  └────

  Now files with `.mlx' extension will be treated as OCaml modules.

  The merlin/ocamllsp users will get roughly the same level of support
  for `.mlx' syntax as they get for `.ml' but some additional text
  editor/IDE configuration is needed to associate `.mlx' files with
  merlin/ocamllsp.

  For neovim users there's a plugin [ocaml-mlx/ocaml_mlx.nvim], which
  does that bit of a configuration and provides highlighting for `.mlx'
  files based on a tree-sitter parser.


[ocaml-mlx/ocaml_mlx.nvim] <https://github.com/ocaml-mlx/ocaml_mlx.nvim>


heml, a HEEx-inspired HTML templating ppx for OCaml
═══════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-heml-a-heex-inspired-html-templating-ppx-for-ocaml/15037/1>


Petri-Johan Last announced
──────────────────────────

  I've been working on [heml], a PPX extension that allows you to build
  complex HTML templates directly in your OCaml code.

  It's a direct implementation of Elixir Phoenix's HEEx templates.

  The README on GitHub has an example video of what it looks like in the
  editor and a bunch of example code, but here's a short snippet for
  convenience:

  ┌────
  │ (* layouts.ml *)
  │ let layout ~title contents = {%heml|<!DOCTYPE html>
  │ <html lang="en">
  │   <head><title><%s= title %></title></head>
  │   <body>
  │     <%raw= contents %>
  │   </body>
  │ </html>|}
  │ 
  │ (* main.ml *)
  │ let heading ~text = {%heml|<h1><%s= text %></h1>|}
  │ 
  │ let greet ~user = {%heml|<p>Hello, <%s= user %></p>|}
  │ 
  │ let () =
  │   let title = "Hello, OCaml!" in
  │   print_endline {%heml|<Layouts.layout title={title}>
  │     <.heading text="Hello!" />
  │ 
  │     <%= List.iter (fun user -> %>
  │       <.greet user={user} />
  │     <%= ) ["Steve"; "Becca"; "John"]; %>
  │ 
  │ </Layouts.layout>|}
  └────

  heml differs from other templating solutions by allowing you to call
  OCaml code directly in the template, which is extremely useful for
  looping and conditional rendering. You can also create and call your
  own components/layouts.

  heml leverages the OCaml LSP for accurate in-line errors, and the
  templates are parsed and compiled into a series of Buffer writes which
  returns a string at runtime.

  I'm still waiting for it to be released on [opam], but thought I'd
  share it in the meantime in case anyone would be willing to check it
  out and provide feedback :slight_smile: .


[heml] <https://github.com/pjlast/heml>

[opam] <https://github.com/ocaml/opam-repository/pull/26297>


Forester 4.2
════════════

  Archive: <https://discuss.ocaml.org/t/ann-forester-4-2/15043/1>


Jon Sterling announced
──────────────────────

  I am pleased to announce the release of Forester 4.2 on opam, which is
  an OCaml utility to develop “Forests”, which are densely interlinked
  mathematical websites / Zettelkästen similar to the [Stacks project]
  or [Kerodon]. You can see the [changelog] on my own [Forest].

  This release adds many new features and improvements, including:

  ⁃ First-class functions and lazy arguments, which can be used to
    implement more ergonomic MathML macros.
  ⁃ A new query language, which is now expressive enough to encode the
    backmatter
  ⁃ Improved performance of graph analysis (2x overall speedup rendering
    my own forest)

  To see other features and documentation of breaking changes, please
  view the [Forester 4.2 Release Notes].

  My thanks to @kentookura and Jinser Kafka for their contributions to
  this release.


[Stacks project] <https://stacks.math.columbia.edu>

[Kerodon] <https://kerodon.net>

[changelog] <https://www.jonmsterling.com/jms-00WK.xml>

[Forest] <https://www.jonmsterling.com>

[Forester 4.2 Release Notes] <http://www.jonmsterling.com/jms-00WK.xml>


First Robotics and OCaml - Do you know any local teams?
═══════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/first-robotics-and-ocaml-do-you-know-any-local-teams/15051/1>


jbeckford announced
───────────────────

  For those who don't know, First Robotics is a competitive,
  international high school league for robotics:
  <https://www.firstinspires.org/robotics/frc>.

  I've helped a couple students write "scouting" software partially in
  OCaml and partially in Java:
  <https://github.com/diskuv/scoutapps/tree/main?tab=readme-ov-file#sonic-scout-apps>

  It is a very /very/ slow season for robotics teams, but if your local
  high school participates now is a great time for the mentors of that
  team to get ready. If you know a team that needs scouting software and
  want to help spread OCaml to your local neighborhoods … please direct
  message me.


2nd editor tooling dev-meeting: 25th of July 🧙
═══════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-2nd-editor-tooling-dev-meeting-25th-of-july/14953/4>


Continuing this thread, vds announced
─────────────────────────────────────

  Thanks a lot to all participants and speakers, it was a very nice and
  interesting meeting !

  You can find the meeting notes here:
  <https://github.com/ocaml/merlin/wiki/Public-dev%E2%80%90meetings>

  With the summer (/winter) break coming for a lot of us, the next
  meeting will take place in September. We will implement a
  call-for-presentation and a poll to choose meeting times by then.

  Don't hesitate to tell us right away if you would like to give a
  presentation or if you have subjects that you would like us to take
  on. (@andreypopp would you be interested in talking about melange and
  how it integrates with editor tooling ?)


Other OCaml News
════════════════

From the ocaml.org blog
───────────────────────

  Here are links from many OCaml blogs aggregated at [the ocaml.org
  blog].

  • [Introducing tree-sitter-dune]
  • [Creating the SyntaxDocumentation Command - Part 3: VSCode Platform
    Extension]


[the ocaml.org blog] <https://ocaml.org/blog/>

[Introducing tree-sitter-dune]
<http://blog.emillon.org/posts/2024-07-26-introducing-tree-sitter-dune.html>

[Creating the SyntaxDocumentation Command - Part 3: VSCode Platform
Extension]
<https://tarides.com/blog/2024-07-24-creating-the-syntaxdocumentation-command-part-3-vscode-platform-extension>


Old CWN
═══════

  If you happen to miss a CWN, you can [send me a message] and I'll mail
  it to you, or go take a look at [the archive] or the [RSS feed of the
  archives].

  If you also wish to receive it every week by mail, you may subscribe
  to the [caml-list].

  [Alan Schmitt]


[send me a message] <mailto:alan.schmitt@polytechnique.org>

[the archive] <https://alan.petitepomme.net/cwn/>

[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>

[caml-list] <https://sympa.inria.fr/sympa/info/caml-list>

[Alan Schmitt] <https://alan.petitepomme.net/>


[-- Attachment #2: Type: text/html, Size: 22998 bytes --]

             reply	other threads:[~2024-07-30 13:26 UTC|newest]

Thread overview: 236+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-30 13:26 Alan Schmitt [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-04-15  9:51 Alan Schmitt
2025-04-08 13:14 Alan Schmitt
2025-04-01  9:12 Alan Schmitt
2025-03-25  8:06 Alan Schmitt
2025-03-18 10:18 Alan Schmitt
2025-03-11 15:00 Alan Schmitt
2025-03-04 14:01 Alan Schmitt
2025-02-25 10:36 Alan Schmitt
2025-02-18 14:33 Alan Schmitt
2025-02-11  7:17 Alan Schmitt
2025-02-04 12:05 Alan Schmitt
2025-01-28 13:24 Alan Schmitt
2025-01-21 15:47 Alan Schmitt
2025-01-14  8:20 Alan Schmitt
2025-01-07 17:26 Alan Schmitt
2024-12-31  8:03 Alan Schmitt
2024-12-24  8:55 Alan Schmitt
2024-12-17 13:05 Alan Schmitt
2024-12-10 13:48 Alan Schmitt
2024-12-03 14:44 Alan Schmitt
2024-11-26  8:30 Alan Schmitt
2024-11-19  6:52 Alan Schmitt
2024-11-12 15:00 Alan Schmitt
2024-11-05 13:22 Alan Schmitt
2024-10-29 13:30 Alan Schmitt
2024-10-22 12:42 Alan Schmitt
2024-10-15 13:31 Alan Schmitt
2024-10-08 10:56 Alan Schmitt
2024-10-01 13:37 Alan Schmitt
2024-09-24 13:18 Alan Schmitt
2024-09-17 14:02 Alan Schmitt
2024-09-10 13:55 Alan Schmitt
2024-09-03  8:24 Alan Schmitt
2024-08-27  9:02 Alan Schmitt
2024-08-20  9:29 Alan Schmitt
2024-08-13 13:21 Alan Schmitt
2024-08-06  9:00 Alan Schmitt
2024-07-23 13:30 Alan Schmitt
2024-07-16  6:24 Alan Schmitt
2024-07-09  9:19 Alan Schmitt
2024-07-02  7:30 Alan Schmitt
2024-06-25 13:58 Alan Schmitt
2024-06-18 13:05 Alan Schmitt
2024-06-11 15:04 Alan Schmitt
2024-06-04 13:26 Alan Schmitt
2024-05-28  9:07 Alan Schmitt
2024-05-21 13:07 Alan Schmitt
2024-05-14 13:25 Alan Schmitt
2024-05-07  7:30 Alan Schmitt
2024-04-30  7:22 Alan Schmitt
2024-04-23 12:17 Alan Schmitt
2024-04-16 12:00 Alan Schmitt
2024-04-09  9:15 Alan Schmitt
2024-04-02 14:31 Alan Schmitt
2024-03-26  6:32 Alan Schmitt
2024-03-19 15:09 Alan Schmitt
2024-03-12 10:31 Alan Schmitt
2024-03-05 14:50 Alan Schmitt
2024-02-27 13:53 Alan Schmitt
2024-02-20  9:12 Alan Schmitt
2024-02-13  8:42 Alan Schmitt
2024-02-06 15:14 Alan Schmitt
2024-01-30 14:16 Alan Schmitt
2024-01-23  9:45 Alan Schmitt
2024-01-16 10:01 Alan Schmitt
2024-01-09 13:40 Alan Schmitt
2024-01-02  8:59 Alan Schmitt
2023-12-26 10:12 Alan Schmitt
2023-12-19 10:10 Alan Schmitt
2023-12-12 10:20 Alan Schmitt
2023-12-05 10:13 Alan Schmitt
2023-11-28  9:09 Alan Schmitt
2023-11-21  7:47 Alan Schmitt
2023-11-14 13:42 Alan Schmitt
2023-11-07 10:31 Alan Schmitt
2023-10-31 10:43 Alan Schmitt
2023-10-24  9:17 Alan Schmitt
2023-10-17  7:46 Alan Schmitt
2023-10-10  7:48 Alan Schmitt
2023-10-03 13:00 Alan Schmitt
2023-09-19  8:54 Alan Schmitt
2023-09-12 13:21 Alan Schmitt
2023-09-05  9:00 Alan Schmitt
2023-08-29 13:04 Alan Schmitt
2023-08-22  9:20 Alan Schmitt
2023-08-15 16:33 Alan Schmitt
2023-08-08  8:53 Alan Schmitt
2023-08-01  7:13 Alan Schmitt
2023-07-25  8:45 Alan Schmitt
2023-07-11  8:45 Alan Schmitt
2023-07-04  9:18 Alan Schmitt
2023-06-27  8:38 Alan Schmitt
2023-06-20  9:52 Alan Schmitt
2023-06-13  7:09 Alan Schmitt
2023-06-06 14:22 Alan Schmitt
2023-05-30 15:43 Alan Schmitt
2023-05-23  9:41 Alan Schmitt
2023-05-16 13:05 Alan Schmitt
2023-05-09 11:49 Alan Schmitt
2023-05-02  8:01 Alan Schmitt
2023-04-25  9:25 Alan Schmitt
2023-04-18  8:50 Alan Schmitt
2023-04-11 12:41 Alan Schmitt
2023-04-04  8:45 Alan Schmitt
2023-03-28  7:21 Alan Schmitt
2023-03-21 10:07 Alan Schmitt
2023-03-14  9:52 Alan Schmitt
2023-03-07  9:02 Alan Schmitt
2023-02-28 14:38 Alan Schmitt
2023-02-21 10:19 Alan Schmitt
2023-02-14  8:12 Alan Schmitt
2023-02-07  8:16 Alan Schmitt
2023-01-31  6:44 Alan Schmitt
2023-01-24  8:57 Alan Schmitt
2023-01-17  8:37 Alan Schmitt
2022-11-29 14:53 Alan Schmitt
2022-09-27  7:17 Alan Schmitt
2022-09-20 14:01 Alan Schmitt
2022-09-13  8:40 Alan Schmitt
2022-08-23  8:06 Alan Schmitt
2022-08-16  8:51 Alan Schmitt
2022-08-09  8:02 Alan Schmitt
2022-08-02  9:51 Alan Schmitt
2022-07-26 17:54 Alan Schmitt
2022-07-19  8:58 Alan Schmitt
2022-07-12  7:59 Alan Schmitt
2022-07-05  7:42 Alan Schmitt
2022-06-28  7:37 Alan Schmitt
2022-06-21  8:06 Alan Schmitt
2022-06-14  9:29 Alan Schmitt
2022-06-07 10:15 Alan Schmitt
2022-05-31 12:29 Alan Schmitt
2022-05-24  8:04 Alan Schmitt
2022-05-17  7:12 Alan Schmitt
2022-05-10 12:30 Alan Schmitt
2022-05-03  9:11 Alan Schmitt
2022-04-26  6:44 Alan Schmitt
2022-04-19  5:34 Alan Schmitt
2022-04-12  8:10 Alan Schmitt
2022-04-05 11:50 Alan Schmitt
2022-03-29  7:42 Alan Schmitt
2022-03-22 13:01 Alan Schmitt
2022-03-15  9:59 Alan Schmitt
2022-03-01 13:54 Alan Schmitt
2022-02-22 12:43 Alan Schmitt
2022-02-08 13:16 Alan Schmitt
2022-02-01 13:00 Alan Schmitt
2022-01-25 12:44 Alan Schmitt
2022-01-11  8:20 Alan Schmitt
2022-01-04  7:56 Alan Schmitt
2021-12-28  8:59 Alan Schmitt
2021-12-21  9:11 Alan Schmitt
2021-12-14 11:02 Alan Schmitt
2021-11-30 10:51 Alan Schmitt
2021-11-16  8:41 Alan Schmitt
2021-11-09 10:08 Alan Schmitt
2021-11-02  8:50 Alan Schmitt
2021-10-19  8:23 Alan Schmitt
2021-09-28  6:37 Alan Schmitt
2021-09-21  9:09 Alan Schmitt
2021-09-07 13:23 Alan Schmitt
2021-08-24 13:44 Alan Schmitt
2021-08-17  6:24 Alan Schmitt
2021-08-10 16:47 Alan Schmitt
2021-07-27  8:54 Alan Schmitt
2021-07-20 12:58 Alan Schmitt
2021-07-06 12:33 Alan Schmitt
2021-06-29 12:24 Alan Schmitt
2021-06-22  9:04 Alan Schmitt
2021-06-01  9:23 Alan Schmitt
2021-05-25  7:30 Alan Schmitt
2021-05-11 14:47 Alan Schmitt
2021-05-04  8:57 Alan Schmitt
2021-04-27 14:26 Alan Schmitt
2021-04-20  9:07 Alan Schmitt
2021-04-06  9:42 Alan Schmitt
2021-03-30 14:55 Alan Schmitt
2021-03-23  9:05 Alan Schmitt
2021-03-16 10:31 Alan Schmitt
2021-03-09 10:58 Alan Schmitt
2021-02-23  9:51 Alan Schmitt
2021-02-16 13:53 Alan Schmitt
2021-02-02 13:56 Alan Schmitt
2021-01-26 13:25 Alan Schmitt
2021-01-19 14:28 Alan Schmitt
2021-01-12  9:47 Alan Schmitt
2021-01-05 11:22 Alan Schmitt
2020-12-29  9:59 Alan Schmitt
2020-12-22  8:48 Alan Schmitt
2020-12-15  9:51 Alan Schmitt
2020-12-01  8:54 Alan Schmitt
2020-11-03 15:15 Alan Schmitt
2020-10-27  8:43 Alan Schmitt
2020-10-20  8:15 Alan Schmitt
2020-10-06  7:22 Alan Schmitt
2020-09-29  7:02 Alan Schmitt
2020-09-22  7:27 Alan Schmitt
2020-09-08 13:11 Alan Schmitt
2020-09-01  7:55 Alan Schmitt
2020-08-18  7:25 Alan Schmitt
2020-07-28 16:57 Alan Schmitt
2020-07-21 14:42 Alan Schmitt
2020-07-14  9:54 Alan Schmitt
2020-07-07 10:04 Alan Schmitt
2020-06-30  7:00 Alan Schmitt
2020-06-16  8:36 Alan Schmitt
2020-06-09  8:28 Alan Schmitt
2020-05-19  9:52 Alan Schmitt
2020-05-12  7:45 Alan Schmitt
2020-05-05  7:45 Alan Schmitt
2020-04-28 12:44 Alan Schmitt
2020-04-21  8:58 Alan Schmitt
2020-04-14  7:28 Alan Schmitt
2020-04-07  7:51 Alan Schmitt
2020-03-31  9:54 Alan Schmitt
2020-03-24  9:31 Alan Schmitt
2020-03-17 11:04 Alan Schmitt
2020-03-10 14:28 Alan Schmitt
2020-03-03  8:00 Alan Schmitt
2020-02-25  8:51 Alan Schmitt
2020-02-18  8:18 Alan Schmitt
2020-02-04  8:47 Alan Schmitt
2020-01-28 10:53 Alan Schmitt
2020-01-21 14:08 Alan Schmitt
2020-01-14 14:16 Alan Schmitt
2020-01-07 13:43 Alan Schmitt
2019-12-31  9:18 Alan Schmitt
2019-12-17  8:52 Alan Schmitt
2019-12-10  8:21 Alan Schmitt
2019-12-03 15:42 Alan Schmitt
2019-11-26  8:33 Alan Schmitt
2019-11-12 13:21 Alan Schmitt
2019-11-05  6:55 Alan Schmitt
2019-10-15  7:28 Alan Schmitt
2019-09-03  7:35 Alan Schmitt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2r0bbt3i9.fsf@mac-03220211.irisa.fr \
    --to=alan.schmitt@polytechnique.org \
    --cc=caml-list@inria.fr \
    --cc=lwn@lwn.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox