Changelog for parsley-core-2.3.0.0
Revision history for parsley-core
2.3.0.0 -- 2023-08-20
- Added internal support for optimisation flags, not exposed into public facing API yet.
- These are threaded through many places and functions via an implicit parameter.
- Deprecated
Text16
, since it is flawed with UTF-8. - Distinguished between static and dynamic input representations (
DynRep
vsStaRep
). - Improved static binding of input changing the signature of
eval
. - Reworked input consumption and fixed several bugs.
- Moved to an
uncons
model, adjusted several of theInputOps
. - Removed
array
-backedString
implementation. - Stored
Offset
in the rewind queue, notInput
. - Unpacking and unboxing of internal structures, improving compile-time performance?
- Removed
Jump
instruction, it's not needed.
2.2.0.1 -- 2023-04-26
- Improved the free register analysis by reimplementing in terms of lambda-lifting algorithms.
2.2.0.0 -- 2022-08-03
- Removed
RangeSet
, as this now resides inrangeset
.
2.1.0.1 -- 2022-06-01
- Added normalisation rule for lets in
Lam
. - Added GHC 9.2 support.
2.1.0.0 -- 2022-01-12
- Added
RangeSet
datastructure. - Added
Pos
module for static manipulation of position information. - Added
CharPred
as a specialised defunctionalisation ofChar -> Bool
functions. - Moved
InputCharacteristic
to its own module. - Use
CharPred
forSat
andSatisfy
. - Simplified the interface for
Ops.sat
. - Simplified
buildYesHandler
and allowed it to capture a statically annotated offset. - Introduced
buildIterYesHandler
which can capture static offet. - Changed types of
bindSameHandler
andbindIterSame
. - Added
StaYesHandler
type toOps
. - Renamed
updatePos
toupdatePosQ
. - Added many methods for manipulating positions to
PosOps
. - Made
initPos
fully static. - Changed the type of
readChar
. - Hid some internals of
Input
. - Exposed some new methods for
Input
. - Added
INPUT
to 8.6+ backend forDefunc
. - Added a
poke
method toQueueLike
. - Added a
charPred
converter toDefunc
.
2.0.0.0 -- 2021-11-24
- Removed
compile
,eval
,codeGen
from the API. - Removed
chainPre
andchainPost
from the API. - Added
Typeable
constraint toLIFTED
. - Removed
lamTermBool
anduserBool
from the API:Typeable
subsumes them. - Added
RANGES
to theDefunc
API.
1.8.0.0 -- 2021-11-13
- Reversed order of arguments on
Subroutine#
, offset comes last. - Added
Pos
type, and threaded it through - Added
Input o
andInput# o
, which package anOffset o
orCode (Rep o)
withPos
information. - Added cabal flag to control the packed or unpacked representation of positions
- Added
PosSelector
- Added
line
andcol
to primitives andPosition
to Combinator AST, as well asSelectPos
to instructions. - Changed
OFFSET
toINPUT
inDefunc
1.7.2.0 -- 2021-10-31
- Added
reclaimable
to backend analysis, this allowslookAhead
to calculate reclaim ignoringBlockCoins
- Fixed small bug in coin analysis that meant that
lookAhead
always contributes0
coins (min 0
vsmax 0
).
1.7.1.1 -- 2021-10-30
- Improved eta-reduction to handle multiple arguments.
- Added eta-reduction to constructed return continutations.
1.7.1.0 -- 2021-10-29
- Moved
parse
into core API, this will reduce the area of incompatibility. - Added
loop
combinator.
1.7.0.0 -- 2021-10-28
- Added fields to the handlers to signify if they should generate a binding or not.
- Added two
Inliner
modules to handle inlining in front- and back-ends. - Removed field from
Let
which contains the body, it was a wart. - Refactored the internal representation of static handlers, making them more uniform.
- Added basic eta-reduction capabilities to the low-level generators: this can be improved and expanded!
- Renamed
buildIterAlways
andbuildIterSame
tobindIterAlways
andbindIterSame
. - Renamed
StaHandler
toAugmentedStaHandler
.
1.6.0.0 -- 2021-08-13
Fix for issue #27
- Added
BlockCoins
instruction andCutImmune
node. - Changed how cut compliance is determined, and stopped some incorrect factoring.
- Removed unneeded flags for analysis.
1.5.0.0 -- 2021-08-12
Infrastructure for improved handler analysis:
- Refactored
LetBinding
to include more generic metadata. - Added metadata to
StaSubroutine
and introducedStaSubroutine#
and associated functions. - Fed metadata through
letRec
'sgenBinding
and intobuildRec
. - Added an
Amount
toOffset
, which also takes into account a multiplicity, used to track unknown but non-zero quantities. - Added
callCC
and modified the API forsuspend
to allow for abstractedOffset
creation. ThecallCC
operation promises to utilise static input consumption from the subroutine to refine the input to the return continuation (making use of the multiplicity above). - Refactored the
CombinatorAnalyser
into anAnalysis.Cut
module (and movedDependencies
there too) - Refactored the
InstructionAnalyser
into anAnalysis.Coins
andAnalysis.Relevancy
modules - More documentation
Input Reclamation:
- Added
Machine.Types.Coins
, which separates coins for length checks from input reclamation. Analysis.Coins
now deals wiith theCoins
type, as do the instructions.- Added
Common.RewindQueue
to handle rewindable input caching. - Added
Common.QueueLike
to abstract both queue's common operations. - Moved the implementation of
Queue
into aQueue.Impl
submodule, forRewindQueue
and testing. - Added
GiveBursary
instruction to implement a variant ofRefundCoins
. - Added
PrefetchChar
instruction for future prefetching on branches. - Added
canAfford
toContext
and removed the brokenliquidate
. - Improved the input factoring for join points.
Misc:
- Removed the unneeded
genDefuncX
operations inCore.Defunc
, andap
, hid others. - Added type to
next
inCharList
. - Added auxilliary information parameter to
sat
. - Added
fetch
and broke it out ofsat
.
1.4.0.0 -- 2021-07-22
NOTE: The API exposed to parsley
has changed, however, the changed types match up
and the underlying types are not exposed. This means that parsley
cannot write
the type down to begin with, so the API change does not actually result in any
backward incompatiblity unless the Parsley.Internal.*
modules are imported:
this meets requirements for internal major change.
- Removed an
unsafeCoerce
from register creation, using more existentials. - Changed
CharList
'smore
check to test for[]
and not length (faster!) - Added static information to offset in the machine
- Leveraged static information to refine handlers at compile time, offering up to 20% performance improvement
- Code restructuring and refactoring
- Added copious amounts of documentation
1.3.0.0 -- 2021-07-03
- Improved the
Lam
reduction algorithm - Preliminary support for
if true
reduction fromitem
andconst True
- Introduced
_if
andap
inMachine.Defunc
, removedgenDefunc1
1.2.0.1 -- 2021-07-03
- Added Jump-Elision optimisation to the code generator.
1.2.0.0 -- 2021-07-01
- For GHC 8.10+, leveraged the static structure of functions:
- Handlers are now static functions, reducing the beta-reduction required by GHC,
fatal
now generates better code - Return continuations are also static functions, reducing beta-reduction required by GHC,
halt
generates better code - Recursive calls are also static functions, removing a lot of junk with the conversion from iterators to recursion
- Handlers are now static functions, reducing the beta-reduction required by GHC,
- Registers are now bound once for recursive parsers, which close over their free-registers
- Strictness has been updated to reflect the reduced burden on GHC to optimise: now strictness is for performance, and not to coax GHC to optimise at the cost of performance
- Removed the "bad" binding for
Sat
, handlers are always bound on creation, so the binding is basically meaningless - Performance on 8.10+ is anywhere from 10-20% faster than 1.1.0.0
1.1.0.0 -- 2021-07-01
- Switched both backends to make use of
Lam
instead ofCore.Defunc
, reducing burden on GHC - Added duplication avoidance optimisation when value to be duplicated is
Lam.Var True
1.0.1.1 -- 2021-06-27
- Added input factoring to
try p <|> q
and also forms withf <$> try p <|> q
andtry p $> x <|> q
1.0.1.0 -- 2021-06-26
- Introduced
Lam
to the API and conversion functions forCore.Defunc
- Extra type ascriptions added to generated code
1.0.0.0 -- 2021-06-12
- First version. Released on an unsuspecting world.
- Core factored out of the main
parsley
package