not really known
Go to file
2020-07-25 11:21:32 -04:00
.vscode first iteration of custom types shapes optimization and inlining functions 2020-07-21 18:46:57 -07:00
src move delcarations to src folder 2020-07-25 11:21:32 -04:00
test first iteration of custom types shapes optimization and inlining functions 2020-07-21 18:46:57 -07:00
testcases/simple simple test case 2020-07-25 10:29:34 -04:00
.gitignore gitignore elm stuff 2020-07-25 10:29:10 -04:00
jest.config.js first iteration of custom types shapes optimization and inlining functions 2020-07-21 18:46:57 -07:00
LICENSE Initial commit 2020-07-20 08:37:25 -04:00
package-lock.json first iteration of custom types shapes optimization and inlining functions 2020-07-21 18:46:57 -07:00
package.json add tree sitter and tree sitter elm dependencies 2020-07-25 11:19:19 -04:00
README.md Project Sketch 2020-07-20 09:50:54 -04:00
tsconfig.json move delcarations to src folder 2020-07-25 11:21:32 -04:00
TSDX_README.md first iteration of custom types shapes optimization and inlining functions 2020-07-21 18:46:57 -07:00
yarn.lock add node-elm-compiler. ignore types 2020-07-25 10:30:07 -04:00

Elm Optimize

This project is meant to explore different optimizations that are specific to elm-generated code.

I'd like to avoid aspects that can handled by terser, uglify or prepack just because it seems like this is a huge area and there's already a ton of work done. We should focus on things specific to Elm, and possibly make it easier for these tools to be even more effective.

The first focus is to implement transformations that were explored by Robin in this dev.to post

Needed work

  • - Set up a basic test example (e.g. fold through a list of maybe Ints and sum them).
  • - Set up complation pipeline
    • We want to be able to compare different JS outputs to get a handle of who does what transformation. So let's set up a pipeline that will generate multiple js files in a folder at different stages of the pipeline (e.g. elm.js, elm.optimized.js, elm.optimized.prepack.js. This will allow us to diff stages and ultimately compare how our tool can potentially allow other tools to function more effectively.

Choose AST tool We need some tool(s) that will allow us to do the following:

  1. Parse Elm code and extract information such as a type definition (i.e. what are all the variant names and their structures).
  2. Parse JS code and transform bits of the AST.

Options

Opimization exploration

  • 1. Parse Elm code and prepare a summary that matches custom type variant names to their type definition
  • 2. Fill out variant constructors with nulls so that the shapes of the objects are the same. (See V8 fast properties reference. Is there some way to check how V8 is implementing a specific object?)
  • 3. Transform A2(author$project$Main$add, 1, 2) to author$project$Main$add.f(1, 2) when appropriate

References

  1. V8 Fast Properties