Skip to content

Commit 3655aa3

Browse files
ReScript retreat blogpost (#895)
* ReScript retreat blogpost * Add some pics * Add acknowledgements * Bump date * Add youtube link to compiler talk * 2025 update * Add colored CCA logo * Add results section * Review fixes * cca link
1 parent aeebaed commit 3655aa3

10 files changed

+140
-9
lines changed

_blogposts/2025-03-17-retreats.mdx

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
---
2+
author: rescript-association
3+
date: "2025-03-17"
4+
previewImg: /static/blog/rescript_retreat_2024.jpg
5+
articleImg: /static/blog/rescript_retreat_2024.jpg
6+
title: ReScript Retreat
7+
description: |
8+
Accelerating ReScript development through meeting in-person.
9+
---
10+
11+
ReScript is exclusively developed by volunteers. Some help out in their free time, some are lucky to do it in their work time, but overall there is no single developer who exclusively works full-time on the advancement of the ReScript project.
12+
13+
That's not unusual for many open-source projects, but we want to be sustainable long-term. One way to not only accelerate development but also improve collaboration between contributors is to meet together in-person and hack on things. In this article, we explain what usually happens on such a "Retreat".
14+
15+
Last year, from the 23rd to the 26th of May, the ReScript Association invited many contributors to hack on ReScript. In the end almost all of them responded to the invitation and thus, 15 people from all over the world traveled to Vienna, Austria to meet in person, to do talks, discussions and decisions about and contributions to the ReScript toolchain.
16+
17+
## Talks
18+
19+
<Image
20+
src="/static/blog/rescript_retreat_2024_talk_parser.jpg"
21+
caption="Maxim Valcke giving an introduction about parser development"
22+
withShadow="true"
23+
/>
24+
25+
Not everybody is on the same level of knowledge about the parser, compiler or other tools. Talks are a great way to get to a better collective understanding before the real work gets started. In 2024 we had the following talks:
26+
27+
- Brief overview of parser development, by Maxim Valcke ([@\_binary_search](https://x.com/_binary_search))
28+
- Intro to compiler development, by Cristiano Calcagno ([@ccrisccris](https://x.com/ccrisccris))
29+
- The full talk is also available here: [Youtube Link](https://youtu.be/sQinTXDynew?si=AihxJBQDEyzMCvFz).
30+
- Talk about editor tooling, by Gabriel Nordeborn ([@\_\_\_zth\_\_\_](https://x.com/___zth___))
31+
32+
## Group work
33+
34+
<Image
35+
src="/static/blog/rescript_retreat_2024_group_work.jpg"
36+
caption="Some core contributors thinking hard"
37+
withShadow="true"
38+
/>
39+
40+
Our contributors split up in multiple small groups of 2-4 people. Every group had a specific topic assigned:
41+
42+
- New Build System (Codename rewatch)
43+
- rescript-lang.org Playground Output
44+
- ReScript Core and how to include it in the compiler
45+
- loops, foreach, iterators
46+
- Syntax, JSX
47+
48+
## Discussions
49+
50+
We also did group discussions about how to elevator pitch ReScript and about ReScript's roadmap.
51+
52+
The full results of this discussions and the group work can be read at the ReScript forum: https://forum.rescript-lang.org/t/ann-rescript-retreat-roadmap-summary-2024/5275. But that is the past, have a look at the following section to see how far we have come:
53+
54+
### Results
55+
56+
Almost a year later, most of the initiatives started at the retreat have either been completed or significantly advanced in development.
57+
- We moved the new "Core" standard library into the compiler. Only needs some minor tweaks and documentation.
58+
- We are getting closer to making "rewatch" our new main build system, with many improvements and fixes already in place.
59+
- We merged first-class `RegExp` syntax.
60+
- We merged support for pattern-matching on `dict`s.
61+
- We removed curried mode.
62+
- We removed `.ml` compilation support.
63+
- Based on the above and other cleanups we were able to introduce a new abstract syntax tree which will allow for cleaner language design. Of course a compatibility layer is available.
64+
65+
And more. But that's material for another release blog post.
66+
67+
## Food, Drinks and Leisure
68+
69+
After every hard working day, we finished the day with a nice dinner.
70+
For instance, one day we gathered together at a viennese winery in the evening.
71+
72+
<Image
73+
src="/static/blog/rescript_retreat_2024_winery.jpg"
74+
caption="Contributors enjoying refreshing food and drinks after working hard"
75+
withShadow="true"
76+
/>
77+
78+
At the last day we of course also did some city sightseeing and enjoyed a final Viennese lunch.
79+
80+
## Conclusion
81+
82+
After the retreat, most participants stated that they want to do it again and overall it was a very productive but also fun event for all of us. And we are happy to announce that there will be a ReScript Retreat in 2025, from the 3rd - 6th of May, once again in Vienna, Austria. And a similar number of participants will attend.
83+
84+
## Our Sponsors
85+
86+
<Image
87+
externalLink="https://www.cca.io"
88+
src="/static/lp/cca-io-color.svg"
89+
size="small"
90+
caption="Thanks to cca.io for sponsoring our retreat venue"
91+
/>
92+
93+
The [ReScript Association](https://rescript-association.org/) paid for all the participants hotel rooms and some of the lunches and dinners. We worked at a coworking space which was paid for by the Vienna-based company [cca.io](https://www.cca.io/), which also happens to employ two of our contributors.
94+
95+
## Acknowledgements
96+
97+
We want to thank all contributors who are so invested into this language that they don't hesitate to travel the globe, some even with their families. Thank you so much!
98+
99+
[@bloodyowl](https://github.com/bloodyowl), [@cknitt](https://github.com/cknitt), [@cometkim](https://github.com/cometkim), [@cristianoc](https://github.com/cristianoc), [@fhammerschmidt](https://github.com/fhammerschmidt), [@glennsl](https://github.com/glennsl), [@IwanKaramazow](https://github.com/IwanKaramazow), [@jfrolich](https://github.com/jfrolich), [@JonoPrest](https://github.com/JonoPrest), [@mununki](https://github.com/mununki), [@rolandpeelen](https://github.com/rolandpeelen), [@ryyppy](https://github.com/ryyppy), [@shulhi](https://github.com/shulhi), [@tsnobip](https://github.com/tsnobip), [@zth](https://github.com/zth).
728 KB
Loading
Loading
Loading
Loading

public/static/lp/cca-io-color.svg

+7
Loading

src/components/Image.res

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
@react.component
2-
let default = (~src: string, ~withShadow=false, ~caption: option<string>=?) => {
3-
<Markdown.Image src withShadow ?caption />
2+
let default = (~src: string, ~size=#large, ~withShadow=false, ~caption: option<string>=?) => {
3+
<Markdown.Image src size withShadow ?caption />
44
}

src/components/Markdown.res

+21-5
Original file line numberDiff line numberDiff line change
@@ -474,20 +474,36 @@ module Strong = {
474474

475475
module Image = {
476476
@react.component
477-
let make = (~src: string, ~withShadow=false, ~caption: option<string>=?) => {
477+
let make = (
478+
~src: string,
479+
~size=#large,
480+
~withShadow=false,
481+
~caption: option<string>=?,
482+
~externalLink: option<string>=?,
483+
) => {
484+
let width = switch size {
485+
| #large => "w-full"
486+
| #small => "w-1/4"
487+
}
488+
478489
let shadow = if withShadow {
479490
"shadow-md"
480491
} else {
481492
""
482493
}
483-
<div className="mt-8 mb-12 md:-mx-16">
484-
<a href=src rel="noopener noreferrer">
485-
<img className={"w-full " ++ shadow} src />
494+
495+
let target = externalLink->Option.isSome ? Some("_blank") : None
496+
497+
<div className={`mt-8 mb-12 ${size === #large ? "md:-mx-16" : ""}`}>
498+
<a href={externalLink->Option.getOr(src)} rel="noopener noreferrer" ?target>
499+
<img className={width ++ " " ++ shadow} src />
486500
</a>
487501
{switch caption {
488502
| None => React.null
489503
| Some(caption) =>
490-
<div className="mt-4 text-14 text-gray-60 md:ml-16"> {React.string(caption)} </div>
504+
<div className={`mt-4 text-14 text-gray-60 ${size === #large ? "md:ml-16" : ""}`}>
505+
{React.string(caption)}
506+
</div>
491507
}}
492508
</div>
493509
}

src/components/Markdown.resi

+7-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,13 @@ module Strong: {
155155

156156
module Image: {
157157
@react.component
158-
let make: (~src: string, ~withShadow: bool=?, ~caption: string=?) => React.element
158+
let make: (
159+
~src: string,
160+
~size: [#large | #small]=?,
161+
~withShadow: bool=?,
162+
~caption: string=?,
163+
~externalLink: string=?,
164+
) => React.element
159165
}
160166

161167
module Video: {

src/components/MarkdownComponents.res

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ type t = {
1111
@as("Intro")
1212
intro?: React.componentLike<Intro.props<React.element>, React.element>,
1313
@as("Image")
14-
image?: React.componentLike<Image.props<string, bool, string>, React.element>,
14+
image?: React.componentLike<
15+
Image.props<string, [#large | #small], bool, string, string>,
16+
React.element,
17+
>,
1518
@as("Video")
1619
video?: React.componentLike<Video.props<string, string>, React.element>,
1720
@as("UrlBox")

0 commit comments

Comments
 (0)