Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

elm make hang then runaway memory usage from orphan process #2241

Open
javanwood opened this issue Jan 19, 2022 · 3 comments · Fixed by Zokka-Dev/zokka-compiler#20 · May be fixed by #2330
Open

elm make hang then runaway memory usage from orphan process #2241

javanwood opened this issue Jan 19, 2022 · 3 comments · Fixed by Zokka-Dev/zokka-compiler#20 · May be fixed by #2330

Comments

@javanwood
Copy link

Quick Summary: Compilation hangs and an elm process remains active after <ctrl-c>. Memory usage of this process reaches >16GB (memory available to system) which bogged down my system.

SSCCE

module Main exposing (..)

foldMap : (a -> b) -> (a -> c) -> (b -> c -> c) -> a -> c
foldMap fab fac fbc a = fac a

break : Float -> (Float, Float)
break input = foldMap identity (\x -> (x, x)) (\( low, high ) x -> ( min low x, max high x )) input
  • Elm: Elm 0.19.1
  • Browser: NA
  • Operating System: macOS 11.4

Additional Details

elm make hangs after printing Compiling .... The orphan elm process only continues if waiting for longer than 5-6 seconds before using to cancel the elm make command.

When changing (\( low, high ) x -> to (\x ( low, high ) -> the snippet compiles as expected, and changing ( min low x, max high x ) to ( x, x ) results in the compiler error `foldMap` needs the 4th argument to be: ( ∞, ∞ ).

Came across this writing a foldMap to calculate the min and max of a List Float but have simplified to get a minimal reproduction.

Love your work!

@github-actions
Copy link

Thanks for reporting this! To set expectations:

  • Issues are reviewed in batches, so it can take some time to get a response.
  • Ask questions in a community forum. You will get an answer quicker that way!
  • If you experience something similar, open a new issue. We like duplicates.

Finally, please be patient with the core team. They are trying their best with limited resources.

@maxime-didier
Copy link

Hello,

We encountered the same problem in our code after I mistakenly swapped the arguments of the set function in a lens. It looks to me that we encountered the same typechecker bug:

module Main exposing (..)

type alias Lens a b =
  { get : a -> b
  , set : b -> a -> a
  }

oopsLens : Lens { b | oops : a } b
oopsLens = Lens .oops (\x oops -> { x | oops = oops })

@pete-murphy
Copy link

pete-murphy commented Jan 9, 2024

Ran into a similar issue, though not from mistakenly swapping arguments, this was from a use of elm-form that I thought would actually compile. Boiled it down to

module Main exposing (..)


type X r
    = X


f : X r -> X { r | y : () }
f _ =
    X


x : X { z : () }
x =
    X


example : ()
example =
    x
        |> (if True then
                f

            else
                identity
           )
        |> always ()

That causes elm make to hang and balloon in memory usage (even after exiting with Ctrl+c).

changlinli added a commit to changlinli/elm-compiler that referenced this issue Jul 17, 2024
This fixes elm#2241

Preliminary testing seems to indicate this isn't as bad of a slowdown as
it may seem. For more details see Zokka-Dev/zokka-compiler#20

This is meant as a reference PR for other people working on the Elm
compiler.
@changlinli changlinli linked a pull request Jul 17, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants