As the Elm 0.19 upgrade docs are lacking some vital information you only know about by consistently hanging out on the Elm Slack I thought I’d list them here for all the word to see.
- Massive compile time improvements
- Huge internal rework of the compiler that is prepared for the coming use-cases
- Many bugfixes regarding performance - i.e. pattern matching on tuples, many case branches, unnecessary recompiles, too much IO, memory leaks
- Removed many XSS attack vectors - i.e. disallowing
innerHTML
and inline event handlers - Removed user defined operators, i.e. no more Narsil operators in user code :slightly_smiling_face:
<==|[======>
- The already unpublished
Native
was renamed toKernel
and is no longer usable in user code, it always has been an implementation detail of the platform, native code is also built differently than before. Onlyelm
andelm-explorations
Github organizations can haveeffect Module
s andKernel
code - Many modules have been moved out of the Elm core to be able to update them separately without having to release a new language version
- Dead Code Elimination in production builds - smaller builds, opportunity for clever usage of compiler knowledge to improve runtime with
--optimize
flag forelm make
- New
elm.json
format that includes test dependencies and supports the distinction of libraries and applications Array
is now faster and has some significant bugfixes- The magic polymorphic
toString
has been removed in favor of specialized functions likeString.fromInt
and the like - No more
Debug.crash
in production but is renamed toDebug.todo
in debug mode - Event, port and message handling is now synchronous by default (you can opt-in to async on demand) which supports cases where events in the DOM have to be handled synchronously, i.e. the Clipboard API
- Initialization on the JS side is done uniformly via
Elm.Main.init({ flags: {}, node: document.querySelector("#root") })
- There is now
elm/browser
which contains navigation, page eventhandling and page visibility APIs Browser.application
with full SPA routingBrowser.document
set<title>
, control<body>
Browser.element
simple TEA “widget”Browser.sandbox
simplified beginner program- In addition to ports WebComponents are proposed for specific use cases of JS interop
- The compiler can now be built with Haskell Stack -
lts-11.20
for GHC 8.2.2 for now