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 (
DynRepvsStaRep). - Improved static binding of input changing the signature of
eval. - Reworked input consumption and fixed several bugs.
- Moved to an
unconsmodel, adjusted several of theInputOps. - Removed
array-backedStringimplementation. - Stored
Offsetin the rewind queue, notInput. - Unpacking and unboxing of internal structures, improving compile-time performance?
- Removed
Jumpinstruction, 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
RangeSetdatastructure. - Added
Posmodule for static manipulation of position information. - Added
CharPredas a specialised defunctionalisation ofChar -> Boolfunctions. - Moved
InputCharacteristicto its own module. - Use
CharPredforSatandSatisfy. - Simplified the interface for
Ops.sat. - Simplified
buildYesHandlerand allowed it to capture a statically annotated offset. - Introduced
buildIterYesHandlerwhich can capture static offet. - Changed types of
bindSameHandlerandbindIterSame. - Added
StaYesHandlertype toOps. - Renamed
updatePostoupdatePosQ. - Added many methods for manipulating positions to
PosOps. - Made
initPosfully static. - Changed the type of
readChar. - Hid some internals of
Input. - Exposed some new methods for
Input. - Added
INPUTto 8.6+ backend forDefunc. - Added a
pokemethod toQueueLike. - Added a
charPredconverter toDefunc.
2.0.0.0 -- 2021-11-24
- Removed
compile,eval,codeGenfrom the API. - Removed
chainPreandchainPostfrom the API. - Added
Typeableconstraint toLIFTED. - Removed
lamTermBoolanduserBoolfrom the API:Typeablesubsumes them. - Added
RANGESto theDefuncAPI.
1.8.0.0 -- 2021-11-13
- Reversed order of arguments on
Subroutine#, offset comes last. - Added
Postype, and threaded it through - Added
Input oandInput# o, which package anOffset oorCode (Rep o)withPosinformation. - Added cabal flag to control the packed or unpacked representation of positions
- Added
PosSelector - Added
lineandcolto primitives andPositionto Combinator AST, as well asSelectPosto instructions. - Changed
OFFSETtoINPUTinDefunc
1.7.2.0 -- 2021-10-31
- Added
reclaimableto backend analysis, this allowslookAheadto calculate reclaim ignoringBlockCoins - Fixed small bug in coin analysis that meant that
lookAheadalways contributes0coins (min 0vsmax 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
parseinto core API, this will reduce the area of incompatibility. - Added
loopcombinator.
1.7.0.0 -- 2021-10-28
- Added fields to the handlers to signify if they should generate a binding or not.
- Added two
Inlinermodules to handle inlining in front- and back-ends. - Removed field from
Letwhich 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
buildIterAlwaysandbuildIterSametobindIterAlwaysandbindIterSame. - Renamed
StaHandlertoAugmentedStaHandler.
1.6.0.0 -- 2021-08-13
Fix for issue #27
- Added
BlockCoinsinstruction andCutImmunenode. - 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
LetBindingto include more generic metadata. - Added metadata to
StaSubroutineand introducedStaSubroutine#and associated functions. - Fed metadata through
letRec'sgenBindingand intobuildRec. - Added an
AmounttoOffset, which also takes into account a multiplicity, used to track unknown but non-zero quantities. - Added
callCCand modified the API forsuspendto allow for abstractedOffsetcreation. ThecallCCoperation 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
CombinatorAnalyserinto anAnalysis.Cutmodule (and movedDependenciesthere too) - Refactored the
InstructionAnalyserinto anAnalysis.CoinsandAnalysis.Relevancymodules - More documentation
Input Reclamation:
- Added
Machine.Types.Coins, which separates coins for length checks from input reclamation. Analysis.Coinsnow deals wiith theCoinstype, as do the instructions.- Added
Common.RewindQueueto handle rewindable input caching. - Added
Common.QueueLiketo abstract both queue's common operations. - Moved the implementation of
Queueinto aQueue.Implsubmodule, forRewindQueueand testing. - Added
GiveBursaryinstruction to implement a variant ofRefundCoins. - Added
PrefetchCharinstruction for future prefetching on branches. - Added
canAffordtoContextand removed the brokenliquidate. - Improved the input factoring for join points.
Misc:
- Removed the unneeded
genDefuncXoperations inCore.Defunc, andap, hid others. - Added type to
nextinCharList. - Added auxilliary information parameter to
sat. - Added
fetchand 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
unsafeCoercefrom register creation, using more existentials. - Changed
CharList'smorecheck 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
Lamreduction algorithm - Preliminary support for
if truereduction fromitemandconst True - Introduced
_ifandapinMachine.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,
fatalnow generates better code - Return continuations are also static functions, reducing beta-reduction required by GHC,
haltgenerates 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
Laminstead 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 <|> qand also forms withf <$> try p <|> qandtry p $> x <|> q
1.0.1.0 -- 2021-06-26
- Introduced
Lamto 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
parsleypackage