github samber/lo v1.53.0

9 hours ago

Announcing the latest release of lo with lots of good gifts! 🎁

🌊 First, a big thanks to @d-enk for making lots of performance improvements in the recent weeks.

πŸ§ͺ Second, this release introduces a new simd experimental package. If you run on an amd64 architecture and a recent CPU, you can perform very fast operations thanks to SIMD CPU instructions.
-> Documentation: https://lo.samber.dev/docs/experimental/simd

πŸ’₯ Third, this version adds *Err variants of many lo helpers (like MapErr, FlatMapErr, ReduceErr, etc.) whose callbacks can return an error and short-circuit execution when one occurs.

Note

The simd sub-package is considered not stable. We might break the initial API based on developers' feedback in the coming months.

moto-gopher2

Features & improvements

  • feat: adding SIMD helpers by @samber in #801
  • feat: adding Error variants: MapErr, FlatMapErr, ReduceErr... by @samber in #823
  • feat: support for buffer iterator by @mimol91 in #824
  • feat: add Take, TakeWhile, FilterTake, Window, and Sliding functions by @juliazadorozhnaya in #760
  • feat: add a Concat slice function. by @FGasper in #714
  • feat: add iterator slice helpers by @juliazadorozhnaya in #791
  • feat(it): adding loit.Concat by @samber in #722
  • feat: Allow Union/Intersect to take many lists by @frankywahl in #181
  • feat: Add Clone function to return shallow copy of slice collections by @quexer in #732
  • feat: IntersectBy by @ghosx in #653
  • feat: Support Custom Assert by @RelicOfTesla in #755
  • feat: Must support Custom error handler. by @RelicOfTesla in #752
  • feat: WithoutNth handle non-comparable types by @urisimchoni in #774
  • refactor: remove unnecessary type arguments in NewThrottle by @d-enk in #773
  • refactor: lo.IntersectBy + adding loit.IntersectBy + adding doc by @samber in #739
  • fix: rename IsSortedByKey to IsSortedBy by @NathanBaulch in #735
  • fix(iter/tuples): support break iteration over Zip[By] seq by @d-enk in #757
  • fix(it.Mode): align behavior with lo.Mode and ensure consistent slice… by @intojhanurag in #711
  • fix: improve Clone function to preserve nilness and avoid liveness issues by @quexer in #740
  • fix: reset n counter per iteration in it.Replace by @LikimiaD in #799
  • fix: make Ellipsis operate on runes instead of bytes to prevent Unicode truncation by @veeceey in #796
  • fix: correct DropByIndex handling of negative indices out of bounds by @d-enk in #778

Deprecation

  • refactor: remove helpers deprecated for more than 3y by @samber in #810

Performance improvements

  • feat: Optimize UniqMap to reduce unnecessary slice preallocation by @ivolkoff in #710
  • refactor(it): simplify DropLast, TrimSuffix, TrimPrefix and use range loops by @d-enk in #782
  • bench: fix iterators to actually iterate in benchmarks by @d-enk in #781
  • refactor: simplify slice cut/trim prefix/suffix functions by @d-enk in #787
  • perf: optimize Sliding by pre-allocating result capacity by @d-enk in #783
  • refactor: improve SamplesBy performance and revert non-panic behavior for negative count by @d-enk in #786
  • feat(perf): speed up some functions with linear complexity O=n2 -> O=2n by @samber in #726
  • perf: only allocate a single map in Intersect by @NathanBaulch in #736
  • perf: preallocate Words string buffer by @NathanBaulch in #728
  • refactor: improve lo[it].Intersect[By] readability and performance by @d-enk in #756
  • perf: preallocate result slice in SamplesBy by @d-enk in #766
  • perf: optimize PartitionBy by eliminating redundant append by @d-enk in #765
  • perf: correct prealloc of the result in FindUniques/Duplicates[By] by @d-enk in #764
  • perf: use Ternary() instead If().Else() in Range/RangeFrom by @d-enk in #770
  • perf: optimize it.Trim to use DropLastWhile(DropWhile(...)) by @d-enk in #780
  • perf: replace Min/Max(Range) with Min/MaxIndexBy in DispatchingStrategy by @d-enk in #779
  • perf: preallocate result slice in RangeWithSteps by @d-enk in #820
  • perf: avoid unnecessary error allocation in NthOr, NthOrEmpty by @d-enk in #817
  • perf: optimize Zip and ZipBy functions by @d-enk in #818
  • perf: lazy it.Reverse iteration instead of in-place mutation by @d-enk in #814
  • perf: optimize Substring to work directly with strings instead of converting to runes by @d-enk in #822
  • perf: optimize it.CountBy by removing Filter iterator chain by @d-enk in #813
  • perf: optimize it.Find to avoid unnecessary allocations by @d-enk in #811
  • perf: optimize it.ContainsBy/EveryBy/SomeBy/NoneBy to avoid unnecessary allocations by @d-enk in #812
  • refactor: simplify for loop by @d-enk in #772
  • refactor: remove some redundant checks by @d-enk in #771
  • refactor: simplify it.HasSuffix implementation by @d-enk in #767
  • refactor: improve Slice logic and fix docstring by @d-enk in #785

Thanks @d-enk !!

Other (doc, tests, style...)

  • test: adding missing test cases to ellipsis by @samber in #809
  • fix(test): Increase timeout values in concurrency tests by @samber in #775
  • refactor: reorganize llms.txt and add missing helpers by @samber in #723
  • Fix Clone() go playground link in README by @sethisernhagen in #761
  • Intersect CI test fix by @frankywahl in #731
  • lint: fix inconsistent callback function parameter names by @NathanBaulch in #730
  • style: fix linter by @samber in #802
  • fix: update Play links for Async functions in concurrency.go by @Weeranieb in #724
  • lint: use Keyify internally by @NathanBaulch in #691
  • Fix references to "lo" instead of "ro" by @pgr0ss in #713
  • style: reduce the number of files in root directory by @samber in #719
  • style: move img/ directory into docs/static/img by @samber in #721
  • refactor: use separate variables for each iter.Pull in it.Zip functions by @d-enk in #816
  • refactor: remove redundant map zero value initialization in throttleBy by @d-enk in #815
  • doc: explain chunkstring inconsistency by @samber in #789
  • doc: fix package name from "lo" to "it" by @samber in #794
  • doc(exp,simd): adding warning about API stability for code under exp/ by @samber in #808
  • doc(maxby): adding comment to explain inconsistency by @samber in #727
  • doc: adding some conventions for callback naming by @samber in #738
  • docs: fix typos by @alexandear in #745
  • chore(tests): some test improvements by @samber in #725
  • chore(ci): improve go version management in CI by @samber in #806
  • chore(ci): adding codeql by @samber in #819
  • style(simd): rename sse to avx by @samber in #821

Dependencies

  • chore(deps): bump lodash from 4.17.21 to 4.17.23 in /docs by @dependabot[bot] in #777
  • chore(deps): bump webpack from 5.102.0 to 5.105.0 in /docs by @dependabot[bot] in #793
  • chore(deps): bump actions/setup-node from 5 to 6 by @dependabot[bot] in #716
  • chore(deps): bump marked from 16.3.0 to 16.4.1 in /docs by @dependabot[bot] in #717
  • chore(deps): bump js-yaml from 3.14.1 to 3.14.2 in /docs by @dependabot[bot] in #741
  • chore(deps): bump node-forge from 1.3.1 to 1.3.2 in /docs by @dependabot[bot] in #744
  • chore(deps): bump ajv from 6.12.6 to 6.14.0 in /docs by @dependabot[bot] in #807
  • chore(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in #747
  • chore(deps): bump golangci/golangci-lint-action from 8 to 9 by @dependabot[bot] in #746
  • chore(deps): bump marked from 16.4.1 to 17.0.1 in /docs by @dependabot[bot] in #748
  • chore(deps): bump mdast-util-to-hast from 13.2.0 to 13.2.1 in /docs by @dependabot[bot] in #750
  • chore(deps): bump express from 4.21.2 to 4.22.1 in /docs by @dependabot[bot] in #751

New Contributors

Full Changelog: v1.52.0...v1.53.0

Don't miss a new lo release

NewReleases is sending notifications on new releases.