Changelog for parsley-core-1.6.0.0
Revision history for parsley-core
1.0.0.0 -- 2021-06-12
- First version. Released on an unsuspecting world.
- Core factored out of the main
parsley
package
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.1.1 -- 2021-06-27
- Added input factoring to
try p <|> q
and also forms withf <$> try p <|> q
andtry p $> x <|> q
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.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.2.0.1 -- 2021-07-03
- Added Jump-Elision optimisation to the code generator.
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.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.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.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.