Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:19
erlang
2006-Optimize-when-comparing-maps.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2006-Optimize-when-comparing-maps.patch of Package erlang
From b20593b3dff4fa1017110c160d6a28ebca6a295f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Fri, 7 Feb 2020 11:43:40 +0100 Subject: [PATCH] Optimize =:= when comparing maps Teach `=:=` to immediately return `false` when comparing two maps of different sizes. That can be much faster for huge maps. Reported in the elixir forum: https://elixirforum.com/t/erlang-2-does-not-seem-to-check-map-sizes-before-performing-the-thoroughful-comparison/28910 --- erts/emulator/beam/utils.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c index d6e069f756..2f7c8dfb5e 100644 --- a/erts/emulator/beam/utils.c +++ b/erts/emulator/beam/utils.c @@ -2973,10 +2973,14 @@ tailrecur_ne: bb = hashmap_val(b) + 1; switch (hdr & _HEADER_MAP_SUBTAG_MASK) { case HAMT_SUBTAG_HEAD_ARRAY: + if (aa[0] != bb[0]) + goto not_equal; aa++; bb++; sz = 16; break; case HAMT_SUBTAG_HEAD_BITMAP: + if (aa[0] != bb[0]) + goto not_equal; aa++; bb++; case HAMT_SUBTAG_NODE_BITMAP: sz = hashmap_bitcount(MAP_HEADER_VAL(hdr)); -- 2.16.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor