summaryrefslogtreecommitdiff
path: root/libraries/base
Commit message (Collapse)AuthorAgeFilesLines
* testsuite: Skip T17414 on LinuxBen Gamari2019-11-171-0/+4
| | | | | | It is typical for $TMP to be a small tmpfson Linux. This test will fail in such cases since we must create a file larger than the filesystem. See #17459.
* Fixed issue #17435, missing Data instancesMario Blažević2019-11-172-0/+16
|
* base: Bump version to 4.14.0.0Ben Gamari2019-11-142-2/+2
| | | | | Metric Increase: T4801
* testsuite: Mark tests fragile in threaded2 as fragile in all concurrent waysBen Gamari2019-11-102-2/+2
|
* Fix incorrect pluralsBrian Wignall2019-11-091-1/+1
|
* Incorporate MR review suggestions; add change in changelogBrian Wignall2019-11-092-3/+6
|
* Add IsList instance for ZipList (closes #17433)ghc-8.11-startBrian Wignall2019-11-091-1/+9
|
* testsuite: Mark T17414 as fragile on WindowsBen Gamari2019-11-091-1/+5
| | | | | | This consistently times out on Windows as described in #17453. I have tried increasing the timeout multiplier to two yet it stills fails. Disabling until we have time to investigate.
* base: Fix TBA in changelogBen Gamari2019-11-091-2/+2
|
* base: Add missing imports in Windows locking implementationBen Gamari2019-11-071-0/+3
|
* Adding examples to Semigroup/monoidDan Brooks2019-11-062-0/+21
|
* Add +RTS --disable-delayed-os-memory-return. Fixes #17411.Niklas Hambüchen2019-11-011-0/+3
| | | | | | Sets `MiscFlags.disableDelayedOsMemoryReturn`. See the added `Note [MADV_FREE and MADV_DONTNEED]` for details.
* base: Ensure that failIO isn't SOURCE importedBen Gamari2019-11-014-9/+18
| | | | | | | | | failIO has useful information in its demand signature (specifically that it bottoms) which is hidden if it is SOURCE imported, as noted in #16588. Rejigger things such that we don't SOURCE import it. Metric Increase: T13701
* Fix rounding around 0taylorfausak2019-11-011-6/+9
|
* Implement `round` for `Ratio` that doesn't explode with `Natural`staylorfausak2019-11-011-0/+7
|
* base: Various haddock fixesBen Gamari2019-10-312-5/+5
| | | | Just a few things I found while looking at #17383.
* testsuite: Add test for #17414Ben Gamari2019-10-312-0/+20
|
* base: Clamp IO operation size to 2GB on DarwinBen Gamari2019-10-311-4/+17
| | | | | As reported in #17414, Darwin throws EINVAL in response to large writes.
* base: Split up file locking implementationBen Gamari2019-10-298-284/+352
| | | | This makes the CPP significantly easier to follow.
* base: Fix open-file lockingBen Gamari2019-10-292-19/+40
| | | | | | | | | The OFD locking path introduced in 3b784d440d4b01b4c549df7c9a3ed2058edfc780 due to #13945 appears to have never actually worked but we never noticed due to an oversight in the autoconf check. Fix it. Thanks to Oleg Grenrus for noticing this.
* Use `not#` primitive to implement Word's complementSylvain Henry2019-10-291-3/+1
|
* Implement shrinkSmallMutableArray# and resizeSmallMutableArray#.Andrew Martin2019-10-262-1/+42
| | | | | | | | | | | | | | | | | | | | | This is a part of GHC Proposal #25: "Offer more array resizing primitives". Resources related to the proposal: - Discussion: https://github.com/ghc-proposals/ghc-proposals/pull/121 - Proposal: https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0025-resize-boxed.rst Only shrinkSmallMutableArray# is implemented as a primop since a library-space implementation of resizeSmallMutableArray# (in GHC.Exts) is no less efficient than a primop would be. This may be replaced by a primop in the future if someone devises a strategy for growing arrays in-place. The library-space implementation always copies the array when growing it. This commit also tweaks the documentation of the deprecated sizeofMutableByteArray#, removing the mention of concurrency. That primop is unsound even in single-threaded applications. Additionally, the non-negativity assertion on the existing shrinkMutableByteArray# primop has been removed since this predicate is trivially always true.
* Make documentation for byteSwap16 consistent with byteSwap32 (impl is same, ↵Brian Wignall2019-10-251-1/+1
| | | | with s/16/32)
* Merge non-moving garbage collectorBen Gamari2019-10-232-16/+23
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This introduces a concurrent mark & sweep garbage collector to manage the old generation. The concurrent nature of this collector typically results in significantly reduced maximum and mean pause times in applications with large working sets. Due to the large and intricate nature of the change I have opted to preserve the fully-buildable history, including merge commits, which is described in the "Branch overview" section below. Collector design ================ The full design of the collector implemented here is described in detail in a technical note > B. Gamari. "A Concurrent Garbage Collector For the Glasgow Haskell > Compiler" (2018) This document can be requested from @bgamari. The basic heap structure used in this design is heavily inspired by > K. Ueno & A. Ohori. "A fully concurrent garbage collector for > functional programs on multicore processors." /ACM SIGPLAN Notices/ > Vol. 51. No. 9 (presented at ICFP 2016) This design is intended to allow both marking and sweeping concurrent to execution of a multi-core mutator. Unlike the Ueno design, which requires no global synchronization pauses, the collector introduced here requires a stop-the-world pause at the beginning and end of the mark phase. To avoid heap fragmentation, the allocator consists of a number of fixed-size /sub-allocators/. Each of these sub-allocators allocators into its own set of /segments/, themselves allocated from the block allocator. Each segment is broken into a set of fixed-size allocation blocks (which back allocations) in addition to a bitmap (used to track the liveness of blocks) and some additional metadata (used also used to track liveness). This heap structure enables collection via mark-and-sweep, which can be performed concurrently via a snapshot-at-the-beginning scheme (although concurrent collection is not implemented in this patch). Implementation structure ======================== The majority of the collector is implemented in a handful of files: * `rts/Nonmoving.c` is the heart of the beast. It implements the entry-point to the nonmoving collector (`nonmoving_collect`), as well as the allocator (`nonmoving_allocate`) and a number of utilities for manipulating the heap. * `rts/NonmovingMark.c` implements the mark queue functionality, update remembered set, and mark loop. * `rts/NonmovingSweep.c` implements the sweep loop. * `rts/NonmovingScav.c` implements the logic necessary to scavenge the nonmoving heap. Branch overview =============== ``` * wip/gc/opt-pause: | A variety of small optimisations to further reduce pause times. | * wip/gc/compact-nfdata: | Introduce support for compact regions into the non-moving |\ collector | \ | \ | | * wip/gc/segment-header-to-bdescr: | | | Another optimization that we are considering, pushing | | | some segment metadata into the segment descriptor for | | | the sake of locality during mark | | | | * | wip/gc/shortcutting: | | | Support for indirection shortcutting and the selector optimization | | | in the non-moving heap. | | | * | | wip/gc/docs: | |/ Work on implementation documentation. | / |/ * wip/gc/everything: | A roll-up of everything below. |\ | \ | |\ | | \ | | * wip/gc/optimize: | | | A variety of optimizations, primarily to the mark loop. | | | Some of these are microoptimizations but a few are quite | | | significant. In particular, the prefetch patches have | | | produced a nontrivial improvement in mark performance. | | | | | * wip/gc/aging: | | | Enable support for aging in major collections. | | | | * | wip/gc/test: | | | Fix up the testsuite to more or less pass. | | | * | | wip/gc/instrumentation: | | | A variety of runtime instrumentation including statistics | | / support, the nonmoving census, and eventlog support. | |/ | / |/ * wip/gc/nonmoving-concurrent: | The concurrent write barriers. | * wip/gc/nonmoving-nonconcurrent: | The nonmoving collector without the write barriers necessary | for concurrent collection. | * wip/gc/preparation: | A merge of the various preparatory patches that aren't directly | implementing the GC. | | * GHC HEAD . . . ```
| *-. Merge branches 'wip/gc/optimize' and 'wip/gc/test' into wip/gc/everythingwip/gc/everythingBen Gamari2019-10-221-1/+1
| |\ \
| | | * testsuite: Mark length001 as failing under nonmoving wayswip/gc/testBen Gamari2019-10-221-1/+1
| | |/ | | | | | | | | | This is consistent with the other unoptimized ways.
| * | NonmovingCensus: Emit samples to eventlogwip/gc/instrumentationBen Gamari2019-10-221-0/+4
| |/
| * rts: Introduce debug flag for non-moving GCBen Gamari2019-10-201-15/+18
| |
* | base: Add @since on GHC.IO.Handle.Lock.hUnlockBen Gamari2019-10-231-0/+2
| | | | | | | | | | | | Unfortunately this was introduced in base-4.11.0 (GHC 8.4.1) whereas the other locking primitives were added in base-4.10.0 (GHC 8.2.1).
* | testsuite: Don't run T7653 in ghci and profiled waysBen Gamari2019-10-231-2/+2
| | | | | | | | | | Currently this routinely fails in the i386 job. See #7653.
* | Use an IORef for QSemNDavid Feuer2019-10-231-39/+51
| | | | | | | | | | | | | | Replace the outer `MVar` in `QSemN` with an `IORef`. This should probably be lighter, and it removes the need for `uninterruptibleMask`. Previously Differential Revision https://phabricator.haskell.org/D4896
* | Windows: Update tarballs to GCC 9.2 and remove MAX_PATH limit.Tamar Christina2019-10-201-1/+1
|/
* base: Document the fact that Typeable is automatically "derived"Ben Gamari2019-10-081-0/+4
| | | | This fixes #17060.
* Switch to cabal-version=3.0 in base.cabal and rts.cabalAndrey Mokhov2019-10-071-1/+1
|
* Add Monad instances to `(,,) a b` and `(,,,) a b c`Fumiaki Kinoshita2019-10-043-0/+31
|
* docs String, hyperlink to Data.ListJames Brock2019-10-031-0/+1
| | | | | | | | | | | Add a reference to the documentation for Data.List in the description for String. On the generated Haddock for Data.String, http://hackage.haskell.org/package/base-4.12.0.0/docs/Data-String.html there is curently no hyperlink to Data.List, which is where a reader will find most of the useful functions which can operate on Strings. I imagine this has confused beginners who came to this page looking for String operations.
* Do not rely on CUSKs in 'base'Vladislav Zavialov2019-09-302-3/+8
| | | | | Use standalone kind signatures instead of complete user-specified kinds in Data.Type.Equality and Data.Typeable
* Expand description of DataKinds to mention data constructors, and include ↵chris-martin2019-09-271-3/+8
| | | | mention of TypeError
* Clarify the purpose and status of the GHC.TypeLits modulechris-martin2019-09-271-3/+9
|
* base: Move Ix typeclass to GHC.IxBen Gamari2019-09-2510-332/+357
| | | | | The `Ix` class seems rather orthogonal to its original home in `GHC.Arr`.
* base: Add link to "A reflection on types"Ben Gamari2019-09-241-0/+1
| | | | Fixes #17181.
* base: add newtypes for socklen_t and ndfs_t to System.Posix.Types #16568Adam Sandberg Eriksson2019-09-235-6/+33
| | | | | | Metric Increase: haddock.base T4029
* Fix haddocks for marker events in Debug.TraceAlp Mestanogullari2019-09-211-1/+1
|
* Add predicates for testing if IOError is ResourceVanished.Andrew Martin2019-09-132-0/+29
| | | | | This adds isResourceVanished, resourceVanishedErrorType, and isResourceVanishedErrorType to System.IO.Error, resolving #14730.
* Windows: make openTempFile fully atomic.Tamar Christina2019-09-112-29/+47
|
* Use C99 Fixed width types to avoid hack in base's configureJohn Ericson2019-09-013-27/+22
| | | | Define MD5Context in terms of `uint*_t` and don't use `HsFFI.h`.
* base: Reintroduce fusion for scanrTDecki2019-08-222-1/+46
| | | | While avoiding #16943.
* Remove unused imports of the form 'import foo ()' (Fixes #17065)James Foster2019-08-151-1/+0
| | | | | | | | | | | These kinds of imports are necessary in some cases such as importing instances of typeclasses or intentionally creating dependencies in the build system, but '-Wunused-imports' can't detect when they are no longer needed. This commit removes the unused ones currently in the code base (not including test files or submodules), with the hope that doing so may increase parallelism in the build system by removing unnecessary dependencies.
* Fix binary distributionTamar Christina2019-08-131-1/+0
|
* Revert "Make scanr a good producer and consumer"Ben Gamari2019-08-072-18/+2
| | | | | | This reverts commit 4e1dfc3767167dddd0e151a2df8305b12aa0f49c. Due to #16943.