| CARVIEW |
Select Language
HTTP/2 301
date: Fri, 16 Jan 2026 13:35:02 GMT
content-length: 0
location: https://github.com/haskell/ghcide/pull/588
server-timing: nginx;desc="NGINX";dur=0.523648,glb;desc="GLB";dur=121.027716
x-voltron-version: 69ef6d1
vary: Accept-Encoding, Accept, X-Requested-With
server: github.com
x-frame-options: DENY
strict-transport-security: max-age=31536000; includeSubDomains; preload
set-cookie: _gh_sess=rz3bedlSxF9deA2Z49DuMWi8kQ58tTLRrLFv28sQWwwSeBAbUDttdwEKfRbtGK0hI8spf%2Fj5TmhI1GJMuuNsF4pbzWoMDe8UeY7FNQIWP6O6M2XDGR3ZdnV1gEzLSF8LAdUPoLEbG1GY97wxRt8aU%2FDVst6lE4fO3Bn5lnkyUQFG973jJSpKLGHzmrPsTp6wFdz%2FbtjL0KGy2bpOmjSwKkI7ba1cGfL1uJk%2BA7qe0IX6MUuAQron9zId1jsor2fwOEzjOdZn3hMIrO7C0N%2F3sQ%3D%3D--Q0bBQ5CCo5QOEw7n--c0vYR%2F0APwZ6RXeXvlzSFQ%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.963240148.1768570501; Path=/; Domain=github.com; Expires=Sat, 16 Jan 2027 13:35:01 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Sat, 16 Jan 2027 13:35:01 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: 83E2:11A5C0:534627:5B0020:696A3E85
HTTP/2 200
date: Fri, 16 Jan 2026 13:35:04 GMT
content-type: text/html; charset=utf-8
cache-control: no-cache
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com/ copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
referrer-policy: no-referrer-when-downgrade
server-timing: pull_request_layout-fragment;desc="pull_request_layout fragment";dur=1950.228792,conversation_content-fragment;desc="conversation_content fragment";dur=985.929335,conversation_sidebar-fragment;desc="conversation_sidebar fragment";dur=292.759689,nginx;desc="NGINX";dur=1.295624,glb;desc="GLB";dur=113.786591
strict-transport-security: max-age=31536000; includeSubdomains; preload
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
x-content-type-options: nosniff
x-frame-options: deny
x-voltron-version: 69ef6d1
x-xss-protection: 0
server: github.com
content-encoding: gzip
accept-ranges: bytes
x-github-request-id: 83E2:11A5C0:53468F:5B0094:696A3E85
Fix the Hashable instance of Key by ndmitchell · Pull Request #588 · haskell/ghcide · GitHub
Copy link
Copy link
Copy link
Copy link
Skip to content
Navigation Menu
{{ message }}
This repository was archived by the owner on Jan 2, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 94
Fix the Hashable instance of Key #588
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cocreature
approved these changes
May 27, 2020
Collaborator
cocreature
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Collaborator
|
Would this also mean faster lookups and thus perf improvements ? An automated benchmark suite is seriously needed. |
Collaborator
Author
|
This patch and the haskell-lsp-types one should definitely show up in a benchmark, if we had one. Likely on the order of 2-10%, given the profiling I did, but given how profiling adjusts times, very hard to predict. Agreed, without a benchmark its hard to say for sure. |
Collaborator
Author
|
Since I had the benchmark around I ran it. 9.10s, in comparison to 9.77s before. |
mpickering
pushed a commit
to mpickering/ghcide
that referenced
this pull request
May 30, 2020
pepeiborra
pushed a commit
to pepeiborra/ide
that referenced
this pull request
Dec 29, 2020
pepeiborra
pushed a commit
to pepeiborra/ide
that referenced
this pull request
Dec 29, 2020
pepeiborra
pushed a commit
to pepeiborra/ide
that referenced
this pull request
Dec 29, 2020
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
You can’t perform that action at this time.
Before we hashed all unary constructors (e.g. DoesFileExists, GetModificationTime) to the same constant (via the Generic Hashable instance), and thus treated these keys as all equivalent, and thus got tons of hash collisions, and thus got space leaks via haskell-unordered-containers/unordered-containers#254. Much better to not have hash collisions or space leaks, which we do by hashing in the type, like Shake does.
While writing this patch my first approach was to copy Shake, which does
hashWithSalt salt type 'xor' hashWithSalt salt value. That is terrible because(,)useshashWithSaltto merge the pair together, and if you xor two salts that have been xor'd you end up cancelling them out, and go back to collisions galore. I'm going to go fix Shake (I don't think it matters because of how I happy to use it, but might as well get it right). But it's also much easier to just use the pair instance that gets this right.I also looked at haskell-lsp-types, and realised their hashWithSalt method was a generic one which skips all their optimisations, so once that fix lands, we might get a perf benefit. haskell/lsp#248
With this patch I get zero collisions and no space leak. Yay!