Skip to content

Commit

Permalink
Improve efficiency in Elm compiler with interning and other specializ…
Browse files Browse the repository at this point in the history
…ations

+ Reduce memory usage by interning more common values.
+ Consolidate some functions.
  • Loading branch information
Viir committed Apr 1, 2024
1 parent a0972e3 commit 04d3e45
Show file tree
Hide file tree
Showing 4 changed files with 248 additions and 128 deletions.
36 changes: 18 additions & 18 deletions implement/elm-time/ElmTime/compile-elm-program/src/ElmCompiler.elm
Original file line number Diff line number Diff line change
Expand Up @@ -2037,7 +2037,7 @@ compileElmSyntaxPattern elmPattern =
{ expression = Pine.LiteralExpression pineFunctionForRecordAccessAsValue
, environment =
Pine.ListExpression
[ Pine.EnvironmentExpression
[ Pine.environmentExpr
, Pine.LiteralExpression (Pine.valueFromString fieldName)
]
}
Expand Down Expand Up @@ -2203,13 +2203,13 @@ pineFunctionForRecordUpdate : Pine.Expression
pineFunctionForRecordUpdate =
let
recordExpression =
listItemFromIndexExpression_Pine 0 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 0 Pine.environmentExpr

recordFieldsExpression =
pineKernel_ListHead_Pine (listItemFromIndexExpression_Pine 1 recordExpression)

fieldsUpdatesExpression =
listItemFromIndexExpression_Pine 1 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 1 Pine.environmentExpr

recursiveFunction : Pine.Value
recursiveFunction =
Expand Down Expand Up @@ -2257,19 +2257,19 @@ recursiveFunctionToUpdateFieldsInRecord =
let
functionReferenceLocalExpression : Pine.Expression
functionReferenceLocalExpression =
listItemFromIndexExpression_Pine 0 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 0 Pine.environmentExpr

fieldPairsLocalExpression : Pine.Expression
fieldPairsLocalExpression =
listItemFromIndexExpression_Pine 1 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 1 Pine.environmentExpr

processedFieldsLocalExpression : Pine.Expression
processedFieldsLocalExpression =
listItemFromIndexExpression_Pine 2 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 2 Pine.environmentExpr

remainingFieldsLocalExpression : Pine.Expression
remainingFieldsLocalExpression =
listItemFromIndexExpression_Pine 3 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 3 Pine.environmentExpr

remainingFieldsNextLocalExpression : Pine.Expression
remainingFieldsNextLocalExpression =
Expand Down Expand Up @@ -2348,10 +2348,10 @@ pineFunctionForRecordAccess : Pine.Expression
pineFunctionForRecordAccess =
let
recordExpression =
listItemFromIndexExpression_Pine 0 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 0 Pine.environmentExpr

fieldNameLocalExpression =
listItemFromIndexExpression_Pine 1 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 1 Pine.environmentExpr

recordFieldsExpression =
pineKernel_ListHead_Pine (listItemFromIndexExpression_Pine 1 recordExpression)
Expand Down Expand Up @@ -2385,13 +2385,13 @@ recursiveFunctionToLookupFieldInRecord : Pine.Expression
recursiveFunctionToLookupFieldInRecord =
let
selfFunctionLocalExpression =
listItemFromIndexExpression_Pine 0 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 0 Pine.environmentExpr

fieldNameLocalExpression =
listItemFromIndexExpression_Pine 1 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 1 Pine.environmentExpr

remainingFieldsLocalExpression =
listItemFromIndexExpression_Pine 2 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 2 Pine.environmentExpr

continueWithRemainingExpression =
Pine.ParseAndEvalExpression
Expand Down Expand Up @@ -2827,7 +2827,7 @@ emitModuleFunctionDeclarations stackBefore declarations =
getFunctionInnerExpressionFromIndex declarationIndex =
let
getEnvFunctionsExpression =
Pine.EnvironmentExpression
Pine.environmentExpr
|> listItemFromIndexExpression_Pine 0
in
Pine.LiteralExpression
Expand All @@ -2837,7 +2837,7 @@ emitModuleFunctionDeclarations stackBefore declarations =
FirCompiler.listItemFromIndexExpression_Pine
declarationIndex
getEnvFunctionsExpression
, environment = Pine.EnvironmentExpression
, environment = Pine.environmentExpr
}
)
)
Expand Down Expand Up @@ -3056,7 +3056,7 @@ compileElmChoiceTypeTagConstructorValue { tagName, argumentsCount } =
1 ->
Pine.ListExpression
[ Pine.LiteralExpression (Pine.valueFromString tagName)
, Pine.ListExpression [ Pine.EnvironmentExpression ]
, Pine.ListExpression [ Pine.environmentExpr ]
]
|> Pine.encodeExpressionAsValue

Expand All @@ -3073,9 +3073,9 @@ compileElmChoiceTypeTagConstructorValue { tagName, argumentsCount } =
, Pine.ListExpression
[ Pine.ListExpression
[ Pine.LiteralExpression Pine.stringAsValue_Literal
, Pine.EnvironmentExpression
, Pine.environmentExpr
]
, Pine.EnvironmentExpression
, Pine.environmentExpr
|> Pine.encodeExpressionAsValue
|> Pine.LiteralExpression
]
Expand All @@ -3090,7 +3090,7 @@ compileElmChoiceTypeTagConstructorValue { tagName, argumentsCount } =
, List.range 0 (argumentsCount - 1)
|> List.map
(\paramIndex ->
Pine.EnvironmentExpression
Pine.environmentExpr
|> listItemFromIndexExpression_Pine 1
|> listItemFromIndexExpression_Pine paramIndex
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ compileInteractiveSubmission environment submission =
Err error ->
Ok
(buildExpressionForNewStateAndResponse
{ newStateExpression = Pine.EnvironmentExpression
{ newStateExpression = Pine.environmentExpr
, responseExpression =
Pine.LiteralExpression (Pine.valueFromString ("Failed to parse submission: " ++ error))
}
Expand Down Expand Up @@ -269,7 +269,7 @@ compileInteractiveSubmission environment submission =
Ok pineExpression ->
Ok
(buildExpressionForNewStateAndResponse
{ newStateExpression = Pine.EnvironmentExpression
{ newStateExpression = Pine.environmentExpr
, responseExpression = pineExpression
}
)
Expand Down
34 changes: 17 additions & 17 deletions implement/elm-time/ElmTime/compile-elm-program/src/FirCompiler.elm
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ emitDeclarationBlock stackBefore environmentPrefix blockDeclarations config =
List.foldl
(\( availableEmitted, emittedValue ) aggregate ->
if Set.member availableEmitted.functionName allDependencies then
( availableEmitted, Pine.LiteralExpression emittedValue ) :: aggregate
( availableEmitted, Pine.LiteralExpression emittedValue ) :: aggregate

else
aggregate
Expand Down Expand Up @@ -534,10 +534,10 @@ emitDeclarationBlock stackBefore environmentPrefix blockDeclarations config =
not (Set.member declName declDependencies)
&& (Set.diff declDependencies stackBeforeAvailableDeclarations == Set.empty)
then
( declName
, asFunction.innerExpression
)
:: aggregate
( declName
, asFunction.innerExpression
)
:: aggregate

else
aggregate
Expand All @@ -557,7 +557,7 @@ emitDeclarationBlock stackBefore environmentPrefix blockDeclarations config =
closureCaptureFromExpr expr =
let
continueWithDefault =
ExpressionCapture expr
ExpressionCapture expr
in
{- TODO: Make impl to get value more robust, should work for any independent expression.
A simple example would be wrapping in a StringTagExpression.
Expand Down Expand Up @@ -684,7 +684,7 @@ emitDeclarationBlock stackBefore environmentPrefix blockDeclarations config =
Ok
(pineExpressionForDeconstructions
deconstruction
(listItemFromIndexExpression_Pine 1 Pine.EnvironmentExpression)
(listItemFromIndexExpression_Pine 1 Pine.environmentExpr)
)

ExpressionCapture expression ->
Expand Down Expand Up @@ -731,7 +731,7 @@ emitDeclarationBlock stackBefore environmentPrefix blockDeclarations config =

prevEnvFunctionsExpr : Pine.Expression
prevEnvFunctionsExpr =
listItemFromIndexExpression_Pine 0 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 0 Pine.environmentExpr

forwardedItems : List Pine.Expression
forwardedItems =
Expand Down Expand Up @@ -939,7 +939,7 @@ emitReferenceExpression name compilation =
Just deconstruction ->
Ok
(pineExpressionForDeconstructions deconstruction
(listItemFromIndexExpression_Pine 1 Pine.EnvironmentExpression)
(listItemFromIndexExpression_Pine 1 Pine.environmentExpr)
)


Expand Down Expand Up @@ -1161,7 +1161,7 @@ emitFunctionApplication functionExpression arguments compilation =
(\( _, deconstruction ) ->
pineExpressionForDeconstructions
deconstruction
(listItemFromIndexExpression_Pine 1 Pine.EnvironmentExpression)
(listItemFromIndexExpression_Pine 1 Pine.environmentExpr)
)
closureCaptures

Expand All @@ -1178,7 +1178,7 @@ emitFunctionApplication functionExpression arguments compilation =

prevEnvFunctionsExpr : Pine.Expression
prevEnvFunctionsExpr =
listItemFromIndexExpression_Pine 0 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 0 Pine.environmentExpr

forwardedItems : List Pine.Expression
forwardedItems =
Expand Down Expand Up @@ -1274,7 +1274,7 @@ emitFunctionApplicationPine emitStack arguments functionExpressionPine =
]

findReplacementForExpression expression =
if expression == Pine.EnvironmentExpression then
if expression == Pine.environmentExpr then
Just mappedEnvironment

else
Expand Down Expand Up @@ -1308,7 +1308,7 @@ emitApplyFunctionFromCurrentEnvironment compilation { functionName } arguments =
Just ( functionIndexInEnv, function ) ->
let
getEnvFunctionsExpression =
Pine.EnvironmentExpression
Pine.environmentExpr
|> listItemFromIndexExpression_Pine 0

getFunctionExpression =
Expand Down Expand Up @@ -1570,13 +1570,13 @@ adaptivePartialApplicationRecursiveExpression : Pine.Expression
adaptivePartialApplicationRecursiveExpression =
let
selfFunctionLocalExpression =
listItemFromIndexExpression_Pine 0 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 0 Pine.environmentExpr

functionLocalExpression =
listItemFromIndexExpression_Pine 1 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 1 Pine.environmentExpr

remainingArgumentsLocalExpression =
listItemFromIndexExpression_Pine 2 Pine.EnvironmentExpression
listItemFromIndexExpression_Pine 2 Pine.environmentExpr

nextArgumentLocalExpression =
listItemFromIndexExpression_Pine 0 remainingArgumentsLocalExpression
Expand Down Expand Up @@ -2078,7 +2078,7 @@ transformPineExpressionWithOptionalReplacement findReplacement expression =
)

Pine.EnvironmentExpression ->
( Pine.EnvironmentExpression
( Pine.environmentExpr
, { referencesOriginalEnvironment = True
}
)
Expand Down
Loading

0 comments on commit 04d3e45

Please sign in to comment.