[ANN] Project Update | April 2022

Hey everyone!

First of all, I want to apologize for the lack of communication / project management in the past few months. When we founded the ReScript Association and relaunched the rescript-lang.org website, it was a very important goal of mine to maintain an active communication channel to give proper insights on the development processes, goals and milestones, and to involve our community contributors whenever possible. Now life is moving fast, and also on my (and other team member’s) front there have been some quite amazing life-changing events in a very short time.

Usually I don’t talk about private matters, but since I am quite involved in this project, I wanted to give you some insights on what I’ve been up to:

  • From April 2021 - November 2021 we were in the process of planning and buying a new house while moving to the country side, which ended up as the most chaotic project of my life. We moved our stuff in the end of October, not knowing that we will be without water, nor toilet, nor wired internet for almost a month. After our plumber fixed the water supply, it turned out that some pipes weren’t properly connected, so we have been trying to fix a water damage since the beginning of January. It is now April 2022, and we are still waiting for the official hand-over document of the house, so I can’t even tell how many hours I wasted on phone calls to all the different parties involved. Additionally it seemed that our construction company never bothered to set up well-defined property contracts, so I also had to dive into an extremely complex rabbit hole of ambiguous property laws. Most of the stuff is now pending and in progress, but will still take some time to resolve. Luckily the hard work has been done, so I am slowly released from this organizational nightmare :smiley:
  • In between I switched from freelancing to a full time employment-ship at a startup called Ketryx, creating a platform that helps medical device builders to develop compliant, well-regulated safety-critical software (located in Vienna / Boston).
  • And last but no least: In mid of September 2022 we will be eagerly awaiting our first child as well :hatching_chick:

(Aside: I guess this explains the big hole in my Github Contribution Graph, for those who checked :grinning_face_with_smiling_eyes:)

Even going through all of this stress, I wasn’t completely gone though. I kept in touch with motivated contributors like @zth and of course @cristianoc, @Maxim and @rickyvetter to plan what we should be focusing on while Bob is on parental leave.

Current State

What’s up with the core team?

The core team has been pretty silent for a while. I have been tuning in and out (doing internal communications / project / release management / reading forum posts) depending on my private workload. Bob has been mentioning his return somewhere mid of this year to continue his work on the compiler.

Cheng and Maxim also had some private concerns that forced them to take a break, but we are in a tight loop to constantly exchange ideas. Cristiano has been quite active on the editor tooling and made sure the low level infrastructure is running smoothly.

Ricky is currently busy with life and career; we keep exchanging ideas on the new JSX v4 spec though.

So generally speaking there’s still activity going on, but everyone is taking it easy for now to recharge.

Roadmap

Due to all the impediments and personal road blockers, we didn’t feel confident about our original release cycle plans. So we will go back to square 1 and remove the release date plan (the visual graph about v10, v11, v12 … release dates) from our docs and just focus on the tasks / version goals instead. This mistake was on me — I wanted to have some reliable schedule and release dates but underestimated the uncertainty of OSS.

Ultimately, we will regularly post updates on the roadmap anyways, so we will make sure everyone is informed on the current state and potential release dates (kinda like with this post), but we will not set dedicated timelines for specific releases.

What about v10?

The v10 release will most likely be postponed to a later point this year where we feel confident with the feature set. I think it’s more realistic that we are aiming for a 9.2.0 version that will give us a lot of improvements already (and eventually proper M1 support as well).

In the following sections I will try to highlight the current work and planned tasks for the different parts of the platform.

Compiler

Bob has been working on some type system / build system essentials, may it be some experimenting or actual implementation:

Also there’s currently the idea to merge the rescript-syntax and rescript-compiler projects: https://github.com/rescript-lang/rescript-compiler/pull/5268

This PR still raises some questions, so as for now, all syntax contributions should continue on the original rescript-syntax project to keep things simple. The advantages of merging the compiler and syntax project are obvious at first, but from a project management perspective I kinda enjoyed the separate repos for issue tracking / repo complexity reasons. Also it might be a productivity killer to switch existing processes. We have contributors that feel comfortable in the current repo, and there’s some extra work involved, such as porting the commit history / issue tracker. We’ll let you know as soon as we figured this out.

Miscellaneous tasks planned work for the compiler (at least the work I am capable of organizing):

  • Update all the READMEs and CONTRIBUTION guidelines (there’s actually currently a way to compile the compiler with modern OCaml versions for development purposes, but there’s no guidance on that)
  • Document the release process and make sure we have multiple ppl with publishing rights
  • Get a more recent v9 release out that includes all the new syntax changes and other good stuff
  • Cleaning up all occurrences of OCaml code in error messages, warnings etc
  • Better error messages for specific error scenarios (e.g. see some POC in the vscode extension repo)
  • Sync up Js / Belt docstring modules with the data from rescript-lang.org (See pending PR)
  • ReScriptify all the user-facing modules (Dom, Belt, Js, etc.)
  • Finally discuss the way forward with Js rescript-promise and Belt. Originally I wanted to upstream rescript-promise as Js.Promise2, but ultimately there was no consent in the end to actually do it. Now we are thinking on creating a @rescript/js package to make the Js module a third-party package (basically taking @bloodyowl 's rescript-js as a foundation).

For the near future, I’d generally like to find a way to share responsibility of the compiler repository so that newcomers have an easier time contributing to the actual compiler infrastructure, and also allows us to do regular releases managed by multiple people.

Syntax

The syntax got some recent bug fixes that will improve some annoying issues when e.g. reformatting punned record fields, or parse empty function bodys (see list of recently merged PRs).

As mentioned before, the syntax / compiler need to be kept in sync for releases, so the new syntax changes are not released yet. We’ll coordinate with Bob and try to establish sustainable processes for future releases.

More work that’s planned to be done:

  • More bugfixes
  • Docstring syntax support: /** */ instead of @ocaml.doc("My docstring")
  • JSX v4: We are working together with @rickyvetter to spec out the new JSX format in the parser (see [RFC] ReScript React)
  • Infix operator support for a dedicated set of math operators
  • A small extraction tool that helps generating the doc pages for rescript-lang.org (but may also be used for your own projects)
  • Merging syntax repo with the compiler?

Miscellaneous ideas:

  • Have a foromal grammar doc for our language (BNF). So if there’s anyone interested to draft such kind of document, happy to collaborate and give directions.

IDE / Tooling

On the VSCode front, @zth and @cristiano have been doing great work to fix the biggest pain points. There have been a few posts about the development recently, so here’s a list for the details:

Thanks to @zth for keeping an eye on building new features and helping Cristiano to build the right building blocks.

Docs

The docs are generally in some good shape, although of course there’s always room for improvement content wise. There’s a bunch of good issues on the issue tracker, in case anyone feels inspired to work on some docs (check out our Contribution guidelines for technical writing!).

From a technical side, here are some improvements I’d love to see on the ReScript playground (without going overboard with the complexity / entropy of the final code):

  • Playground output panel: Make it possible to show Js.log output in the playground itself
    • Thanks to @diogomafra and @tom-sherman for the exploration work in #420 and #415. Let’s maybe get back into the discussion on how to get the design right here.
  • Module importing: Make it possible to side-load certain npmjs dependencies, or even separate ReScript modules
  • Upgrade to the most recent CodeMirror version: This one is tricky since it involves writing a CM AST parser for ReScript IIRC → might be useful to have our grammar laid out in BNF beforehand
  • Improve type-hints for specific data structures (requires hacking on the JSOOified playground bundle, which probably needs some updating after we managed to get proper understanding of the current state of the compiler repo)

Community

We’d like to involve the community more into our processes to essentially give them more power in shaping the direction of the project.

As a first attempt, we want to assemble some pairing teams to get things off the ground to make sure we are properly aligned on the tasks, vision and goals:

  • @cristianoc, @zth. Gabriel and Cristiano had a good time working together on the editor tooling and already shipped some nice features. They will continue their work on the editor and keep an eye on editor stability / maintainability.
  • @cknitt, @fham. They were using ReScript since Day 1, and their Vienna office is almost in the same street as mine. We will regularly meet up to align on the goals and pair program on syntax / tooling related issues. @Maxim will help us out with code reviews and mentoring.

I am pretty sure there are more people interested in taking tasks for certain parts of the project (syntax, editor, documentation, playground, compiler infrastructure, documentation generation, etc). There’s a lot of different things to do, so if anyone feels capable / committed on a specific topic, we can hopefully do a similar pairing setup with other folks as well.

Community Online Meeting in May / Monthly Standups

I also wanted to take the opportunity and also set up an online meeting to get together and discuss all of the topics mentioned above. There’s probably a lot of questions and ideas and we’d like to discuss them.

Target date will be 2022-05-19T18:00:00Z. Details will be announced in a separate thread.

As soon as we find the right format, we could also set up a regular monthly meeting that allows us to give an update on all the tasks we are working on.

ReScript Conf Light?

Back then in 2018 / 19, we had ReasonConf as one of our most important organizational tools to get the community together and do some serious marketing for our platform. Unfortunately due to the pandemic, it was pretty much impossible for us to organize any kind of events in the past two years.

Although I don’t feel comfortable organizing a 200 person event anytime soon, I’d be pretty keen on organizing a smaller community retreat event with up to 40-70 attendees. The event itself would be pretty free-form — workshops, roadmap planning, maybe some talks and a lot of on-site collaboration to work on the language (together with active / alumni contributors).

The event could potentially take place in March / April 2023 in Vienna. I am crossing my fingers that the pandemic will not get any worse until then.

Funding can partly be provided via the ReScript Association to reduce the ticket price. I am sure there are also companies out there that would help us out being a sponsor. Of course if there’s anyone else interested in organizing events like this, I am happy to discuss the details.

Update: ReScript Association

This year, the Association has taken over the server costs for some parts of our community infrastructure (SimpleAnalytics, Mailgun, Digital Ocean instances for the ReScript, currently also the ReasonML forum) and will make sure to keep things running.

Since I’ve seen some statements about funding for a few times already, I also want to be clear that the ReScript Association actually has some small funds in the bank, but it is obviously not enough to fund a full time position on the project.

Generally speaking, we are capable of managing and distributing small funds for the community, but as for right now it seems like we will spend most of the money on infrastructure, community events and marketing (which IMO is easy to justify).

In an ideal world we’d get enough funding to set up a budget for a proper full time employee for the Association. Maybe one day we will be getting there, so keep this in mind.

Conclusion

I hope this post gives some good insights on the general health of the project. Work has been quite secretive, but IMO there has always been some good progress, especially on the tooling front.

I wanna thank everyone putting their time and effort to help us out, especially @zth who keeps me on my toes to get things organized, and all the active members answering all the questions on the forum.

I am looking forward talking to you all in the next community meetup in May!

Cheers.

59 Likes

Honestly, this is a depressing update, no matter how you spin it.

If it were my project, I would start by doing an honest retrospective about the rebrand and then establish a governance model to remedy the concerns of developers who are using ReScript in production.

Establishing a governance model might attract new talent to make ReScript development sustainable long-term.

7 Likes

Hi Patrick, glad to hear you and the gang are doing okay! :pray:

I’m a little concerned about the state of things and the outlook it has, and I’d like to help :slightly_smiling_face:

I’m currently working with a company that is ready to have me work on the compiler on a weekly basis, since we’ve got some strong pains as we are scaling our codebase and the teams that work on it.

How do we get the ball rolling here?

38 Likes

The very first step would be to attend the proposed meeting on May 19th, where we’d like to have a look at the issue tracker and determine the most urgent issues that are solvable w/o Bob’s extensive help.

As an example, @cknitt had an issue with how the build system wrongly sets the timestamps for JS files (causing watchers like metro to bail out). I guess your list will also be valuable, so let’s put them in some milestone on the issue tracker and try to focus on that. We can also assign tasks right away if someone is interested to tackle a problem.

One important task will be to get the release process of the rescript-compiler streamlined / automated. Ideally we’d also hook up infrastructure that allows us to automatically build M1 builds on Mac hardware (may it be via paid M1 hosting service, or self-hosted).

The compiler repo also needs some cleanup on the development processes (as stated in my opening post), I guess you’d be able to help out with that as well. Probably worth noting that we’d need to coordinate with Bob, since he has the last word on the compiler, and I’d like to find a setup everyone is feeling comfortable with.

For the syntax repo, we already started a process on determining the most urgent issues and created a milestone here: Possible 9.2 Milestone · GitHub . The syntax actually has a lot of interesting tasks, such as refactoring the internal comment table handling (Maxim can tell more about that).

For the rescript-vscode repo, @zth and @cristianoc have a better overview on the work at hand, but I am sure they will be happy to discuss next steps in the meeting and assign work items to ppl who are interested to help.

8 Likes

The collab I’ve been waiting for for years! I can personally vouch for Leandro not only as a developer but also as a human being! He’s been one of the main reasons I even got interested in ReScript/Reason/OCaml and functional programming to begin with and has taught me a lot. Combine that with a company having him ready to work on tasks related to the compiler is the perfect match imo.

Also, regarding this Project Update as a whole: I appreciate the honesty and can just say that some things are more important than programming languages.

15 Likes

Thanks! :heart:

Will be there! :raised_hands:

We’re relying a lot on M1s (currently using one), so we’d be interested in helping here for sure.

Yup, happy to!

Absolutely. Would love to get this in particular started ASAP since some of the larger pains we’ve been having are things that would need to be addressed deeper in the compiler / build system. For any and all of those I would like to just have a conversation with Bob to see how they fit into his vision of the compiler.

Looking forward to the 19th! :wave:

17 Likes