I recently got all of the major features of 0.19 working, so I am now working on cleaning everything up for an alpha that we can test out. I'm uncertain how long that will take, but the end is in sight.
Before I can do an alpha, I need to have the packages working with 0.19, so I have been working on the following things:
- Getting elm diff, elm bump, elm publish, and elm install working again. I looked through all the issues about all of these commands and tried to make as many fixes as possible. One result is that the publish process is quite a bit nicer. (Checks if README exists, verifies build, checks for local changes, etc.)
- Migrating all packages to some new formats. This means transforming elm-package.json to elm.json, normalizing all past licenses to SPDX, updating docs to have a consistent format, filtering out things that could not be migrated, getting info on release dates, etc. I have a pretty solid script for doing this, so I just need to run it again when it's closer to release to get all the latest packages.
With that work done, I can publish things to my test package website. So the next phase is to get all my libraries updated for 0.19 and put them there. I am trying to review issues as I go through the libraries to see if there are changes I should make. So far I have mostly focused on core.
I have some tentative changes. It's unclear if everything here is the right move, so I am sharing so folks can make a note if anything seems like a big problem.
- Introducing a Json.Decode.Error type. This means you have structured errors and folks can display JSON errors in better ways than the default text. Excited to see what people do with this!
- Making a bunch of internal improvements to decoders as recommended in various issues.
- Making Json.Encode.list have an API that better matches common usage.
- Moving Basics.toString to Debug.toString, providing String.fromInt and String.fromFloat for use in production code. I know that having (a -> String) meant that people would accidentally be stringifying records when they absolutely needed a number, so this will be caught by the types now.
- Merging in the new Array implementation (Thank you Robin!)
- Merging in the new Random implementation (Thank you Max!)
- Moving the List.foldr implementation into Elm and making it faster (Thank you Robin!)
I am also thinking about moving certain things out of core. For example, I think regex should be its own package so that it is clearer that you should choose between a real parsing library and regex stuff. As I learn more about dates, I am thinking that it may make sense to have an elm-lang/date library that attempts to get things as right as possible. Not sure though.
Note: These things are all subject to change! Maybe they will be undone. I'm just sharing how things are at the moment!
I get pretty excited about error messages it seems, and one of the remaining tasks is to clean up all the error code. Part of the new command line tool is that the error format has been normalized so that every command produces errors in the same way. One improvement is when there is a problem in elm.json it is formatted in a much nicer way, more aware of JSON structure.
I am not certain when the alpha will be ready to share. I am just chugging along, getting things working, cleaning things up, etc. I do not have a clear timeline for that, but the end is in sight.
The plan is to have a pretty long alpha/testing phase. Probably about a month. The ecosystem is larger now, so I want the folks who work on elm-format, elm-test, pluggins, etc. to have time to get things ready for 0.19 so we can have a really smooth transition on the public release day. I would like the alpha phase to be as long as needed to make that happen.
Excited to share all the improvements!