not really known
Go to file
Matthew Griffith f1997f1a11
Merge pull request #8 from mdgriffith/twop/inline-partial-application
added inlining of partial applications
2020-07-30 16:30:25 -04:00
.vscode fixed ts-node launch 2020-07-25 14:38:20 -07:00
src added inlining of partial applications 2020-07-30 13:26:41 -07:00
test added inlining of partial applications 2020-07-30 13:26:41 -07:00
testcases added inlining of partial applications 2020-07-30 13:26:41 -07: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 added options of inlining _List_fromArray calls with object literals 2020-07-25 21:49:20 -07:00
package.json remove pre-commit hook for now 2020-07-28 22:34:22 -04:00
README.md Project Sketch 2020-07-20 09:50:54 -04:00
transformations.md update comments for inline list transformations 2020-07-29 09:55:57 -04:00
tsconfig.json fixed ts-node launch 2020-07-25 14:38:20 -07:00
TSDX_README.md first iteration of custom types shapes optimization and inlining functions 2020-07-21 18:46:57 -07: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