Jump to content

Talk:Symbol table

Page contents not supported in other languages.
From Wikipedia, the free encyclopedia

Assumption

[edit]

This seems to assume a C/C++ style compilation process. Aren't symbol tables more broadly applicable than that? AftonL 16:06, 26 September 2006 (UTC)[reply]

I suppose, but mostly it works the same way. That allows calls between different languages. Gah4 (talk) 09:40, 1 September 2022 (UTC)[reply]

Hash table

[edit]

The symbol table is created using the hash table data structure. Preceding unsigned comment added by 117.239.68.10 (talk) 09:21, 5 July 2012 (UTC)[reply]

Usually. I know one compiler that uses six linked lists. IBM even suggests that for faster compiling, you should evenly distribute your variable names between 1 and 6 characters. But yes, hash table is common. Gah4 (talk) 09:41, 1 September 2022 (UTC)[reply]

Object files

[edit]

"This symbol table is part of every object file. During the linking of different object files, it is the linker's responsibility to handle any unresolved references."

History

[edit]

Is there some knowledge on who introduced the term "symbol table" and when? — Preceding unsigned comment added by 87.15.127.199 (talk) 08:04, 29 January 2019 (UTC)[reply]

It seems that there is no article, or even section to redirect, for External symbol. Gah4 (talk) 09:43, 1 September 2022 (UTC)[reply]

Interesting. Symbol (computing) redirects here, but there is no definition of the term, or much discussion. There is also Symbol (programming), which also doesn’t have a general discussion. Maybe I will work on the latter article and try to add more general information to,it. Types of symbols would be useful: internal vs. external, relocatable vs. absolute. Peter Flass (talk) 20:09, 1 September 2022 (UTC)[reply]
The thought was that External symbol deserved its own article. In any case, this article is about the data structure in compilers and assemblers (and I suppose linkers) for processing them, but not the symbols themself. But also, external symbols have more processing behind them. Gah4 (talk) 22:44, 1 September 2022 (UTC)[reply]
The Symbol (programming) article currently seems a bit abstruse (i.e it doesn't make any sense to me). My thinking is that would be the place to talk about the history of symbols (symbolic assembler) and the types of symbols, etc. External symbols might be the largest section, and the others might be a sentence or two, but this should make up a good article. Two problems: First, I don't understand what the article is currently saying, since I don't know any of the languages mentioned. Is this about languages that can manipulate symbols as data? Second, symbol is such a basic concept that right off the top I couldn't find a good definition, everyone just takes it for granted. Language manuals talk about proper syntax for symbols, but not what they are. I might have to go back to the origins of symbolic assemblers to get a definition. On the other hand, maybe a new article that can have all the external symbol stuff and be added to later. Peter Flass (talk) 02:31, 2 September 2022 (UTC)[reply]
These are two different things. Symbol (programming) has little to do with Symbol (computing). This article is about symbol tables which work with Symbol (computing). A symbol in this sense is just the meaning of a name. And a symbol table is just a table of names and their meanings (symbols). Names here are not just identifiers, they may be complex things like the qualified names of C++ or the atoms of Erlang.
Atoms were invented because using strings for names is prone to Name collision (a single name is related to two symbols which is usually an error). A networking library may use a function called "write" and a file system library may also have a "write" function. To solve this, atoms are created as unique entities that can be used as names. If someone else creates another atom somewhere in a distant library, I can be sure it is different from my atom and it won't collide with it. Even if a library stores the atom in a name called "write", I can copy or move it to a name "file_write" and then use "write" for something else. Atoms enable indirect naming.
Now, atoms are also called Symbol (programming) which is quite unfortunate because it messes things up. This is why I would remove the part of the article where it says "where each identifier (or symbol), constant" to just "where each identifier, constant". Let's stop messing things up.
A symbolic assembler is called like that because it lets the programmer define new names and give meaning to them (labels, constants, addresses, ...). Instead of writing "016Fh" you define "label repeat_loop = 016Fh". Then, when needed, you could write "repeat_loop" and that name was interpreted as its meaning (its symbol) "016Fh".
Finally, an external symbol is a symbol defined in another part of the program that can be named from this source code file (or library or whatever). The name is here, the symbol is there. Gadelan (talk) 07:54, 30 April 2023 (UTC)[reply]
(just realized I was replying partly to myself). How about: “An external symbol is a symbol visible outside a compilation unit that is resolved by the linker.” Peter Flass (talk) 18:51, 30 April 2023 (UTC)[reply]

"Symbol Table" equals to "Hash Table"

[edit]

There is a popular Alogrithms by Robert Sedgewick book (and a course on coursera), which gives a different meaning to the symbol table. It basically refers to a symbol table as a data structure having the following api:

  1. void put(Key key, Value value)
  2. Value get(Key key)
  3. void delete(Key key)
  4. boolean contains(Key key)
  5. boolean isEmpty()
  6. int size()
  7. Iterable<Key> keys()

Source

Which basically means that his definition of a "symbol table" is very similar or even equals to a definition of a hash table, and almost has no relations with compilers and/or atoms, which are mentioned in this discussion. It seems ambiguous. Which probably means that this article should be split into two:

  1. Symbol Table (Compilers)
  2. Symbol Table (Computer Science) <-- Equals to Hash Table?

And the active one should refer to Symbol (computing), as stated above:

"This article is about symbol tables which work with Symbol (computing)." Pavel Sapehin (talk) 05:54, 4 December 2024 (UTC)[reply]

A hash table is a general data structure. A symbol table is a specific instance of a data structure which may or may not be a hash table. Peter Flass (talk) 14:01, 4 December 2024 (UTC)[reply]