Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

flat symboltable #127

Open
rurban opened this issue Apr 6, 2016 · 0 comments

Comments

1 participant
@rurban
Copy link
Member

commented Apr 6, 2016

get away with the overly slow and huge hash of hashes, and use a single flat hashtable for all symbols (globals, packages, functions).

for easy iteration (list of all package symbols) or deletion of a stash maybe maintain a separate "magic" list of symbols at the stash "name::" entry. simply append to this list as existence is done via hv_exists and deletion can be linear.

we can entirely keep the current gv API, so it should stay transparent. binary symbols should be disallowed though on purpose for security reasons, as pre 5.16.

@rurban rurban self-assigned this Apr 6, 2016

@rurban rurban added this to the v5.24.0 milestone Apr 6, 2016

@rurban rurban added the enhancement label Apr 6, 2016

@rurban rurban modified the milestones: v5.26.0, v5.24.0 May 10, 2016

@rurban rurban added the in progress label Dec 1, 2016

rurban added a commit that referenced this issue Sep 25, 2018

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Nov 2, 2018

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Nov 25, 2018

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Mar 18, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Apr 1, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Apr 5, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Apr 5, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Apr 30, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Jun 12, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Jun 24, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Jun 26, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Jun 27, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Jul 1, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Jul 2, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Jul 2, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.

rurban added a commit that referenced this issue Jul 3, 2019

symtab: gv_search_symtab flat table
With search, insert and delete actions for GVs.
We just rely on the hash, and store the name in the value.
See [cperl #127]

todo: utf8 in name, name check when found,
grow, wrap search around, cuckoo (for now just linear).
integrate.

problematic to refactor: defstash, curstash, (debstash).
they can point to symtab entries containing the stash name,
like "main::" => NAME (gv or hv), just for the current package
name. but changing those stashes and searching is useless, so the value
doesn't need to be a full HV or GV.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.